Java 同步代码块

描述

运用 Java 同步代码块解决多线程卖票案例的数据污染问题。

题目

运用 Java 同步代码块解决多线程卖票案例的数据污染问题。

题目解决思路

  1. 创建两个线程,模拟两个窗口进行卖票。
  2. 使用同步代码块解决数据污染问题。

代码具体实现

同步代码块代码:

public class MyRunnable implements Runnable { public static int count = 1; Object object = new Object(); @Override public void run() { while(true){ // 同步代码块解决数据污染问题 synchronized (object){ if(count <= 5){ System.out.println(Thread.currentThread().getName() + " 卖出第" + count + "个口罩"); count++; }else{ System.out.println("卖光了"); break; } } } } }

测试代码:

public class Test { public static void main(String[] args) { System.out.println("嗨客网(www.haicoder.net)\n"); MyRunnable r = new MyRunnable(); Thread t1 = new Thread(r,"窗口A"); Thread t2 = new Thread(r,"窗口B"); t1.start(); t2.start(); } }

运行结果如下图:

12 Java 同步代码块.png

以上案例使用同步代码块解决多线程卖票产生的数据污染问题。