![Java多线程编程核心技术(第3版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/745/42637745/b_42637745.jpg)
上QQ阅读APP看书,第一时间看更新
2.2.16 同步synchronized(class)代码块可以对类的所有对象实例起作用
同步synchronized(class)代码块的作用其实和synchronized静态方法的作用一样。创建测试项目synBlockMoreObjectOneLock,类文件Service.java代码如下:
package service; public class Service { public void printA() { synchronized (Service.class) { try { System.out.println("线程名称为:" + Thread.currentThread().getName() + "在" + System.currentTimeMillis() + "进入printA"); Thread.sleep(3000); System.out.println("线程名称为:" + Thread.currentThread().getName() + "在" + System.currentTimeMillis() + "离开printA"); } catch (InterruptedException e) { e.printStackTrace(); } } } public void printB() { synchronized (Service.class) { System.out.println("线程名称为:" + Thread.currentThread().getName() + "在" + System.currentTimeMillis() + "进入printB"); System.out.println("线程名称为:" + Thread.currentThread().getName() + "在" + System.currentTimeMillis() + "离开printB"); } } }
两个自定义线程代码如图2-46所示。
![](https://epubservercos.yuewen.com/204B22/22139293909121606/epubprivate/OEBPS/Images/2-46.jpg?sign=1739305036-G0HTUuwe0dQiNKIePJobhflz64rMohpM-0-b327cd79d9b6643d1fded7a8e0c217be)
图2-46 两个自定义线程代码
运行类Run.java代码如下:
package test; import service.Service; import extthread.ThreadA; import extthread.ThreadB; public class Run { public static void main(String[] args) { Service service1 = new Service(); Service service2 = new Service(); ThreadA a = new ThreadA(service1); a.setName("A"); a.start(); ThreadB b = new ThreadB(service2); b.setName("B"); b.start(); } }
程序运行结果如图2-47所示。
![](https://epubservercos.yuewen.com/204B22/22139293909121606/epubprivate/OEBPS/Images/2-47.jpg?sign=1739305036-755Ugo0LHqIGdqJFcan49riRSYroSTjv-0-04ed0117333d80085a901b91372e65da)
图2-47 同步运行