4.线程同步
同步方法
在方法上添加
Synchronized
修饰符,往对象上加锁
非静态同步方法:
锁加在this(对象上)
静态同步方法:
加在类.class(对象)
锁的释放:
同步方法:锁住的代码范围整个方法,锁的控制粒度太宽
同步代码块
public 返回值类型 方法名(){ //... synchronized(锁对象){ //锁住的代码 } //... }
特点:
锁对象任意的,this,类.class(对象)
锁住的只是方法的一部分
缺点:
效率低
容易死锁
模拟:多窗口出售某趟车的车票
分析:
多窗口:多个线程
卖票:任务
共享资源:票
package study; public class Tcket implements Runnable{ //票数 private int count = 10; private boolean flag = true;//没卖完 @Override public void run() { //循环卖票 while (flag){ SellTicket(); } } //卖票方法 public synchronized void SellTicket() { if (count > 0) { try {