1. In order to maintain correct visibility across threads, synchronized or volatile must be used.
2. Reading may be a variable that another thread eventually writes.
3. Write a variable that may be read by another thread.
Example
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("主线程结束"); } }
The above is the detailed content of What are the conditions for using java synchronization?. For more information, please follow other related articles on the PHP Chinese website!