线程的最后一篇,线程同步。
当多个线程使用一个共享资源时,可以将处理共享资源的代码放在一个使用synchronized关键字来修饰的代码块中。
public class XianChengDemo {
public static void main(String[] args) {
TicketWindow tw = new TicketWindow();//创建一个线程对象TicketWindow
Thread t1 = new Thread(tw,"窗口1");//创建线程并起名为窗口1,然后开启
t1.start();
Thread t2 = new Thread(tw,"窗口2");//创建线程并起名为窗口2,然后开启
t2.start();
Thread t3 = new Thread(tw,"窗口3");//创建线程并起名为窗口3,然后开启
t3.start();
Thread t4 = new Thread(tw,"窗口4");//创建线程并起名为窗口4,然后开启
t4.start();
}
}
class TicketWindow implements Runnable {
private int tickets = 100;//初始100张票
Object lock = new Object();//定义一个对象,用作同步代码块的锁
public void run() {
while(true) {//通过死循环语句打印语句
synchronized(lock){//定义同步代码块
try{
Thread.sleep(10);//线程休眠10毫秒
}catch(InterruptedException e){
e.printStackTrace();
}
if(tickets>0) {
Thread th = Thread.currentThread();//获取当前线程
String th_name=th.getName();//获取当前线程的名字
System.out.println(th_name+"正在发售第"+tickets--+"张票");
}else{
break;
}
}
}
}
}