用Java代码模仿卖100张火车票问题:四个售票窗口同时售票且不能卖出同一张火车票。
代码如下。
package lesson;public class Demo1 { public static void main(String[] args) { // TODO Auto-generated method stub Train tt = new Train(); Thread t1 = new Thread(tt); Thread t2 = new Thread(tt); Thread t3 = new Thread(tt); Thread t4 = new Thread(tt); t1.setName("窗口1"); t2.setName("窗口2"); t3.setName("窗口3"); t4.setName("窗口4"); t1.start(); t2.start(); t3.start(); t4.start(); }}class Train implements Runnable{ int a= 1; @Override public synchronized void run() {//synchronized为过程上锁 // TODO Auto-generated method stub while(true) { if(a<=100) { System.out.println(Thread.currentThread().getName()+"卖出"+a+"号票"); a++; } try { this.wait(230);// Thread.sleep(100);//后果输入只有窗口1卖了所有票如图2所示 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }}
《2020最新Java根底精讲视频教程和学习路线!》
wait()失常运行后果图1:
sleep()运行后果如图2所示:
两种后果不同的次要次要是sleep办法没有开释锁,而wait办法开释了锁,使得其余线程能够应用同步控制块或者办法。