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()只能在同步块或者同步方法中使用。