java--线程

多任务处理的两种类型

1.基于进程:

  进程是指一种“自包容”的运行程序,由操作系统直接管理,直接运行,有自己的地址空间,每个进程一开启都会消耗内存。

  特点是允许计算机同时运行两个或多个程序。

2.基于线程:

  线程是指进程内部单一的顺序控制流。一个进程拥有多个线程,多个线程共享一个进程的内存空间。

  基于线程的多任务处理环境中,线程是最小的处理单位。

 

主线程: main方法一运行,就开启主线程。

特点:

1.最先开始。

2.最后结束。

3.产生其他的子线程。

4.回收资源。

 

线程类:Thread        Thread.sleep(500),程序休眠500毫秒再执行。

  创建和启动Thread线程:

  1.声明一个Thread类,并覆盖run()方法,

  class Thread1 extends Thread{

    public void run(){   //覆盖该方法   }

  }          //当一个子类同时重写run(),start()时,优先调用start();

................................................................................

  Thread1 t1=new Thread1();

  t1.start();

  

  2.声明一个实现Runnable接口的类,并实现Run()方法

  class R implements runnable{

    public void run(){    //实现该方法   }

  }

  启动线程,调用start()就会执行run();

.........................................................

  R r=new R();

  Thread t2=new Thread(r);

  t2.start();

 

创建线程时,传入runnable实现类对象,那么线程启动时,会执行该对象的run();

  

 

在线程中调用start和run的区别:

  1.如果直接调用run方法是普通的方法调用,不会在主线程的基础上开启子线程,是单线程。

  2.调用start,会在主线程的基础上开启子线程,多个任务同时执行。

 

线程优先级:

  当两个或以上的线程同时处于就绪状态,等待CPU执行,优先级高的线程会优先执行,  setPriority(10) ---->设置线程优先级,10最高,1最低,5默认。

守护线程/精灵线程/后台线程

  t2.setDaemon(true)     别的线程结束,守护线程就结束。

Thread.join

  把指定线程加入到当前线程,在 B中调用A的join方法,知道A执行完时才执行B

 

线程同步(线程安全)

  当两个及以上的线程同时操作一个资源时,别的线程只能等待,当该线程结束对该资源的访问时,才允许别的线程访问。

同步造成的结果:1.数据安全    2.效率低下

同步有两种方法:

1.同步方法:

public synchronized void test(){}  

2.同步快:

public voidrun(){

  synchronized(obj)

}

 wait和sleep的区别:

1.sleep方法在线程类Thread中定义,with方法在object中定义;

2.with只能放在同步方法或同步块中,表示当前线程对资源进行进行等待,sleep方法可以放在任何位置,表示当前线程睡眠;

3.with方法要释放对象锁,sleep方法不会释放对象锁。

4.with方法使用后,线程需要notify唤醒后才能继续执行,sleep方法休眠结束后线程自动继续执行。 

  

  

posted @ 2016-04-27 22:17  forevery  阅读(126)  评论(0编辑  收藏  举报