public class ThreadSyncDemo2{
public static void main(String []args){
ThreadTest t=new ThreadTest();
new Thread(t).start();
new Thread(t).start();
}
}
class ThreadTest implements Runnable{
private int tickets=100;
public void run(){
while(true){
synchronized(this){
if(tickets>0){
try{
Thread.sleep(3000);
}
catch(Exception e){
System.out.println(e.getMessage());
}
System.out.println(Thread.currentThread().getName()+"正在买第"+tickets--+"号票");
}
}
}
}
}
问题:执行中,两个线程是不断交替运行的,但是我在代码中怎么没找到使县城交替运行的代码?难道线程的交替是默认完成的?
public static void main(String []args){
ThreadTest t=new ThreadTest();
new Thread(t).start();
new Thread(t).start();
}
}
class ThreadTest implements Runnable{
private int tickets=100;
public void run(){
while(true){
synchronized(this){
if(tickets>0){
try{
Thread.sleep(3000);
}
catch(Exception e){
System.out.println(e.getMessage());
}
System.out.println(Thread.currentThread().getName()+"正在买第"+tickets--+"号票");
}
}
}
}
}
问题:执行中,两个线程是不断交替运行的,但是我在代码中怎么没找到使县城交替运行的代码?难道线程的交替是默认完成的?
ThreadTest t=new ThreadTest();
new Thread(t).start();
new Thread(t).start();
}
}
中,俩个new Thread(t).start()就说明了两个线程是不断交替运行的.
synchronized(this)
第一个线程锁定了当前对象
第二个线程执行到这里的时候就暂停下来等待当前对象解锁之后才继续运行
而在第一个线程执行完成之后,tickets也就递减到0了
第二个线程中的代码条件不满足,不再输出信息
去掉synchronized(this)这句之后
就可以看到所谓的线程交互运行的情况了
2、 sleep(3000)在run()中是写在println()之前的,与线程交替运行好像没有什么关系吧。
3、 最困惑的问题:第一个线程执行完run()后,线程是什么状态?它为什么要等待第二个线程执行run()后才继续执行run()?第一个线程为什么不一直使自己run下去?
孙鑫的视频?在哪里能下的到?
2、 sleep(3000)在run()中是写在println()之前的,与线程交替运行好像没有什么关系吧。
3、 最困惑的问题:第一个线程执行完run()后,线程是什么状态?它为什么要等待第二个线程执行run()后才继续执行run()?第一个线程为什么不一直使自己run下去?各位大虾,HELP!!