一, java多线程----线程与进程

  进程: 程序(任务)的执行过程,拥有资源(共享内存,共享资源)和线程(一个或者多个,至少一个)。  例如:打开任务管理器,qq,chrome,都属于进程。

  线程:  系统中最小的执行单元,同一进程中有多个线程,线程共享进程的资源。       例如:qq的聊天发送消息。

单线程:程序中只有一个线程,实际上主方法就是一个主线程。

   多线程:程序中运行多个任务,   目的是更好的使用cpu资源。

二,java多线程----线程的实现

  简单一句话来说,继承Thead类或者实现Runnable这个接口,然后重写里面的run方法。

继承Thead类

 public class MyThead extends Thread{

     private String name;
public MyThead(String name) {
this.name = name;
}
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println(name+"------"+i);
}
}
}

实现Runnable接口

 public class MyRunnable  implements Runnable{

     private String name;
public MyRunnable(String name) {
this.name = name;
}
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println(name+"----"+i);
} } }

启动线程

 public class TheadDemo {

     public static void main(String[] args) {
MyThead t1 = new MyThead("t1");
MyThead t2 = new MyThead("t2"); t1.start();
t2.start(); MyRunnable r1 = new MyRunnable("r1");
MyRunnable r2 = new MyRunnable("r2"); Thread t3 = new Thread(r1);
Thread t4 = new Thread(r2); t3.start();
t4.start();
}
}

三,java多线程----线程的状态

   创建状态:创建多线程对象。

   就绪状态: 调用start(),等待cpu调用。

   运行状态: 执行run()。

   阻塞状态:暂时停止执行,将资源交给其他线程使用。

   终止状态:线程结束。

四,java多线程----常用的方法(thead类里面)

  获取当前线程的对象      currentThread()

  得到线程名称               getName()

  判断线程是否运行         isAlive()

  线程的强行运行            join()      例如:俩个线程t1,t2,    当在t1执行的时候,t2调用join()方法,t1暂停不执行,t2执行,执行完成后,释放资源,t1接着执行。

  线程的休眠                 sleep()    例如:t1每执行一次,等待5秒      t1.sleep(5000)

  线程的礼让                 yield()     例如:俩个线程t1,t2,    当在t1执行的时候,t1调用yield()方法,t1暂停不执行,t2执行,执行完成后,释放资源,t1接着执行。

五,java多线程---- 优先级

  MIN_PRIORITY     小

  MAX_PRIORITY    大

  NORM_PRIORITY  正常状态

  如果什么都不设置,默认是5

  线程的优先级其实可以影响线程的执行顺序,这里的影响是可能性的,有可能影响到了,也有可能没有 。

六,java多线程----同步与死锁

  同步的俩种方式,同步代码块,同步方法

  同步代码块格式

  synchronized( 同步的对象){

    同步的代码

  };

  同步方法

  public synchronized void 方法名(){

    同步的代码

  };

  例子:java代码实现火车站三个窗口进行卖票,如果没有同步的话,会怎么样,同步的话,又会出现怎么的情空呢?

  没有同步的代码

  

 class MyRun implements Runnable{
//火车站有5张票
private int ticket = 5;
@Override
public void run() {
for (int i = 0; i < 10; i++) {
if(ticket > 0){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("车票:"+ticket--);
}
}
}
}
public class TheadDemo { public static void main(String[] args) {
MyRun run = new MyRun();
Thread t1 = new Thread(run, "窗口一");
Thread t2 = new Thread(run, "窗口二");
Thread t3 = new Thread(run, "窗口三"); t1.start();
t2.start();
t3.start();
}
}

结果;

  

同步代码块实现代码

 class MyRun implements Runnable{
//火车站有5张票
private int ticket = 5;
@Override
public void run() {
for (int i = 0; i < 10; i++) {
synchronized (this) {
if(ticket > 0){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("车票:"+ticket--);
}
}
}
}
}
public class TheadDemo { public static void main(String[] args) {
MyRun run = new MyRun();
Thread t1 = new Thread(run, "窗口一");
Thread t2 = new Thread(run, "窗口二");
Thread t3 = new Thread(run, "窗口三"); t1.start();
t2.start();
t3.start();
}
}

结果:

结论:在多线程的情况下,为了确保资源准确,或者说数据的准确,我们必须使用线程同步。也就是说加synchronized关键字

死锁的概念-------所谓死锁是指多个进 程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。

        http://c.biancheng.net/cpp/html/2604.html   可以看看该文章,里面解释的很清楚。

七,java多线程----线程的生命周期

    

  

  

java多线程---基础的更多相关文章

  1. [转]Java多线程干货系列—(一)Java多线程基础

    Java多线程干货系列—(一)Java多线程基础 字数7618 阅读1875 评论21 喜欢86 前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们 ...

  2. Java多线程基础:进程和线程之由来

    转载: Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够 ...

  3. Java 多线程——基础知识

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  4. Java多线程--基础概念

    Java多线程--基础概念 必须知道的几个概念 同步和异步 同步方法一旦开始,调用者必须等到方法调用返回后,才能执行后续行为:而异步方法调用,一旦开始,方法调用就立即返回,调用者不用等待就可以继续执行 ...

  5. Java多线程基础知识总结

    2016-07-18 15:40:51 Java 多线程基础 1. 线程和进程 1.1 进程的概念 进程是表示资源分配的基本单位,又是调度运行的基本单位.例如,用户运行自己的程序,系统就创建一个进程, ...

  6. Java基础16:Java多线程基础最全总结

    Java基础16:Java多线程基础最全总结 Java中的线程 Java之父对线程的定义是: 线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(比如文件句柄等)也能访问同一个进 ...

  7. 1、Java多线程基础:进程和线程之由来

    Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够融会贯通 ...

  8. Java 多线程基础(一)基本概念

    Java 多线程基础(一)基本概念 一.并发与并行 1.并发:指两个或多个事件在同一个时间段内发生. 2.并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,安装了多个程序,并发指的是在 ...

  9. Java 多线程基础(三) start() 和 run()

    Java 多线程基础(三) start() 和 run() 通过之前的学习可以看到,创建多线程过程中,最常用的便是 Thread 类中的 start() 方法和线程类的 run() 方法.两个方法都包 ...

  10. Java 多线程基础(四)线程安全

    Java 多线程基础(四)线程安全 在多线程环境下,如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线 ...

随机推荐

  1. 2016.12.5 在Eclipse中为实现类impl自动生成对应接口

    参考来自:http://jingyan.baidu.com/article/ab69b270d63f572ca6189f51.html 在Spring应用中,常常会用到“接口+实现类”的形式,即要实现 ...

  2. linux中xargs用法

    参数代换: xargs xargs 是在做什么的呢?就以字面上的意义来看, x 是加减乘除的乘号,args 则是 arguments (参数) 的意思,所以说,这个玩意儿就是在产生某个命令的参数的意思 ...

  3. 使用Unitils测试DAO层

    Spring 的测试框架为我们提供一个强大的测试环境,解决日常单元测试中遇到的大部分测试难题:如运行多个测试用例和测试方法时,Spring上下文只需创建一次:数据库现场不受破坏:方便手工指定Sprin ...

  4. TSRC挑战赛:WAF之SQL注入绕过挑战实录

    转自腾讯 博文作者:TSRC白帽子 发布日期:2014-09-03 阅读次数:1338 博文内容: 博文作者:lol [TSRC 白帽子] 第二作者:Conqu3r.花开若相惜 来自团队:[Pax.M ...

  5. 手机话费充值和手机流量充值 API

    最近正好需要用到手机充值和流量充值接口,网上找到的,记录并分享下. 聚合数据上面有手机充值的接口,也有流量充值的接口:注册以后可以使用它的OpenId和AppKey. 手机话费充值的接口:https: ...

  6. UNP学习笔记(第五章 TCP客户/服务程序实例)

    我们将在本章使用前一章中介绍的基本函数编写一个完整的TCP客户/服务器程序实例 这个简单得例子是执行如下步骤的一个回射服务器: TCP回射服务器程序 #include "unp.h" ...

  7. DevOps必备的20款顶级工具

    原文地址:http://os.51cto.com/art/201606/512423.htm 开发运维工具与软件开发领域的最佳实践密切相关,也与必要的规范密切相关.在整个开发生命周期涉及到一大批新旧工 ...

  8. ckdeitor的使用方法

    CKEditor 3 JavaScript API Documentation : http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.con ...

  9. G1垃圾收集或者Java中垃圾收集的名词收集

    HotSpot WTF,热壶?我他奶奶的还热火呢,Heat,you know? 总之HotSpot是一种遵循java虚拟机规范的一种实现啦,当时并不是Sun公司搞出来的,而是另外一家公司,后来被Sun ...

  10. beego的MVC架构介绍

    beego 的 MVC 架构介绍 beego 是一个典型的 MVC 框架,它的整个执行逻辑如下图所示: 通过文字来描述如下: 在监听的端口接收数据,默认监听在 8080 端口. 用户请求到达 8080 ...