运行如下程序,发现线程1,2,3中每次run函数中的输出都是随机的,说明三个线程在同时运行
class ThreadDemo extends Thread {
private Thread t;
private String threadname;
ThreadDemo(String name){
threadname = name;
System.out.println("创建线程"+threadname);
}
public void run(){
for(int i=0;i<10;i++)
{
System.out.println("running"+threadname+" "+i);
}
}
public void start(){
System.out.println("starting"+ threadname);
if(t==null){
t=new Thread(this,threadname);
t.start();
}
}
}
class test{
public static void main(String[] args) {
ThreadDemo t1=new ThreadDemo("t1");
ThreadDemo t2=new ThreadDemo("t2");
ThreadDemo t3=new ThreadDemo("t3");
t1.start();
t2.start();
t3.start();
}
}
继承thread方法和实现runnable接口的区别
实现runable接口更优秀
状态转换和同步锁
状态转换
同步锁:
使用sychronized修饰一段代码,一旦有线程1访问这段代码,则线程2必须等线程1访问结束再访问
代码见点击链接
wai/notify方法
wait线程停下进入等待队列,
比如
输出情况
noitfy()让线程继续执行(不太知道怎么用)