在上文的并发卖票中使用的同步代码块保证数据安全,也可以采用下面方式(同步函数):
package test; /** * author:songyan * date: 2019/11/10 **/ public class demo1 { public static void main(String[] args) { Tickert t = new Tickert(); Thread t1 = new Thread(t); Thread t2 = new Thread(t); Thread t3 = new Thread(t); Thread t4 = new Thread(t); t1.start(); t2.start(); t3.start(); t4.start(); } } class Tickert implements Runnable { private int number = 100;//一共一百张票 Object obj = new Object(); @Override public void run() { while (true) { show(); } } public void show() { if (number > 0) { System.out.println("ticket " + number--); } } }
在非静态的同步函数中,锁是this。
在静态同步函数中,锁是Class对象。