十三、多线程

1、实现线程的两种方式

(1)继承Thread类

  Thread构造方法:public Thread(String threadName)

            public Tread()

  重写run()方法,并调用start()执行线程。

  语法:public static void main(String [] args){

        new ThreadTest().start();

      }

(2)实现Runnable接口

  语法:public class Thread extends Object implements Runnable

  实现Runnable接口会创建Thread对象,并将Runnable对象和Thread对象相关联。

  Thread构造方法:public Thread(Runnable r)

            public Thread(Runnable r,String name)

  步骤:1)建立Runnable对象

     2)使用参数为Runnable对象的构造方法创建Thread实例。

     3)调用start()方法启动线程。

  创建Runnable对象:编写一个实现Runnable接口的类,然后实例化该类的对象。

2、线程的生命周期

(1)出生状态:调用start()前

(2)就绪状态:调用start()

(3)运行状态:得到系统资源后

(4)等待状态:调用wait(),进入等待状态的线程必须调用notify()或notifyAll()才能被唤醒。

(5)休眠状态:调用sleep()

(6)阻塞状态:在运行状态下发出输入/输出请求时

(7)死亡状态:run()方法结束

3、操作线程的方法

(1)休眠:sleep()方法

        try{

        Thread.sleep(200);

        }catch(InterruptedException e){

          e.printStackTrace();  

        }

(2)加入:join()方法

      Thread.join()

(3)中断:run()方法中使用无线循环,再用一个boolean标记控制循环的停止。  

 1 public class InterruotedTest implements Runnable{
 2     private boolean isContinue = false;
 3     @Override
 4     public void run() {
 5         // TODO Auto-generated method stub
 6         while(true){
 7             //...
 8             if(isContinue)
 9                 break;
10         }    
11     }
12     public void setContinue(){
13         this.isContinue = ture;
14     }
15 }

  如果线程是通过sleep()或wait()进入就绪状态的,则可以使用interrupt()方法使线程离开run()方法,同时结束线程跑,程序会抛InterruptException异常。

(4)线程礼让:yield()方法

4、线程的优先级

  线程的优先级可以用setPriority()方法进行调整。

5、线程同步:

  同步机制关键字synchronized

(1)同步块

  语法:synchronized(Object){...}

(2)同步方法

  语法:synchronized void f(){}

6、线程间的通信

  wait与sleep的区别在于wait释放锁,sleep不释放锁

  wait(time):在time内暂停

  wait():永久等待,需要用notify或notifyAll唤醒

  wait()与notify()、notifyAll()只能在同步块或者同步方法中使用。

原文地址:https://www.cnblogs.com/yl-saber/p/6015307.html