Java:同步方法
接着上篇博客多线程,继续分析解决 线程同步 的两个方法:同步块 和 同步方法 中的 同步方法。用 synchronized 关键字给针对共享资源进行操作的方法加锁。一个方法使用 synchronized 关键字修饰后,当一个线程A使用这个方法时,其他线程想使用这个方法时就必须等待,直到线程A使用完该方法。
注意:
静态同步方法的锁是给该类的 类对象 加锁。
非静态同步方法其实就是给 this对象 进行加锁。
class SellTicket implements Runnable {
private int tickets = 10;
public void run() {
while (true) {
if (tickets > 0)
sell();
else
return;
}
}
public synchronized void sell() {
if (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "卖出第" + tickets + "张票");
tickets--;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class TicketTest {
public static void main(String args[]) {
SellTicket t = new SellTicket();
new Thread(t, "窗口1").start();
new Thread(t, "窗口2").start();
new Thread(t, "窗口3").start();
System.out.println("主线程结束");
}
}
观察结果,发现三个窗口随机售票,并且不会重复出售同一张票。(如果结果不明显,可以将 tickets 的值设置大一点)
希望可以帮助大家。
链接:
多线程 https://blog.csdn.net/qq_39004632/article/details/90241530
同步块 https://blog.csdn.net/qq_39004632/article/details/90342775