文章目录
启动方式
利用Thread类的子类
- 产生Thread子类MyThread的实例MyThread t= new MyThread(),主线程启动新线程t.start()
调用start方法,会有两种操作:启动新的线程;调用run方法 - 所有线程(不包括daemon thread守护线程)结束时程序也就结束了
利用Runnable接口的实现类的实例
Runnable接口是java.lang.Package里的接口
Public interface Runnable{
Public abstract void run();
}
Printer为Runnable接口的实现类
public class Pprinter implements Runnable{
private String message;
public Printer(String meaadge){
this.message = message;
}
public void run(){
for(int i=0;i<100;i++){
System.out.print(message);
}
}
}
Main类中建立接口实现类的实例,将该实例传给Thread的构造器,调用start方法来启动线程
new Thread(new Printer("Good")).start();
//或者写成
Runnable r = new Printer("Good");
Thread t = new Thread(r);
t.start();
共享互斥
synchronized方法/同步方法
当一个方法加上关键字synchronized声明后,就可以让一个线程操作这个方法。同一个实例的synchronized无法被两个以上线程获取
synchronized阻挡/synchronized语句
只启动方法里的一部分线程,而并非启动整个方法时,可以使用synchronized阻挡
synchronized(表达式){
}
线程协调(线程必须获取欲调用实例的锁定)
wait方法:把线程放入wait set
使用wait方法时,线程便进入wait set
//当前线程进入obj的wait set中,或称当前线程在obj上wait
obj.wait();
//当前线程在this上wait
wait();
this.wait();
notify方法:从wait set拿出线程
//从obj的wait set中唤醒一个线程
obj.notify();
//从this的wait set中唤醒一个线程
notify();
this.notify();