/**
* @author StormWangxhu
* @version 创建时间:2017年11月8日 下午15:19:46
*
*/
1、同步代码块
当多个线程使用同一个共享资源时,可以将处理共享资源的代码放在一个使用synchronized关键字来修饰的代码块中,这个代码块被称作同步代码块。
语法格式如下:
synchronized (lock){
操作共享资源代码块
}
解释:
lock是一个锁对象,他是同步代码块的关键。
当某一个线程执行同步代码块时,其他线程将无法执行当前同步代码块,会发生阻塞,等待当前线程执行完同步代码块后,所有线程开始抢夺线程的执行权,抢到执行权的线程将进入代码块,执行其中的代码。循环往复,知道共享资源被处理完为止。
这个过程就如一个公用电话亭,只有前一个人打完电话出来后,后面的人才可以打。
案例演示:
四个窗口,共售10张票。
package com.stormwang.ThreadDemo;
/**
* @author StormWangxhu
* @version 创建时间:2017年11月8日 上午11:19:46
*
*/
public class TicketsWindowDemo_2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
TicketWindow_1 ticketWindow_1 = new TicketWindow_1(); //创建线程的任务类对象
Thread thread = new Thread(ticketWindow_1, "窗口1");
Thread thread2 = new Thread(ticketWindow_1, "窗口2");
Thread thread3 = new Thread(ticketWindow_1, "窗口3");
Thread thread4 = new Thread(ticketWindow_1, "窗口4");
thread.start();
thread2.start();
thread3.start();
thread4.start();
}
}
//线程的任务类。
class TicketWindow_1 implements Runnable{
private int ticketNumbet = 10 ;
Object lock =