2.加锁 class 创建多个实例
接下来,我们创建 5 个线程,调用不同对象下 synchronized 加锁的 class 代码,具体示例如下:
import java.util.Date; import java.util.concurrent.TimeUnit; publicclass SynchronizedExample { public static void main(String[] args) { // 创建 5 个线程执行任务 for (int i = 0; i < 5; i++) { new Thread(new Runnable() { @Override public void run() { try { // 创建类实例 SynchronizedExample example = new SynchronizedExample(); // 调用 synchronized 修饰的 class 方法 example.classMethod(); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } } /** * synchronized 修饰的 class 方法 * @throws InterruptedException */ public void classMethod() throws InterruptedException { synchronized (SynchronizedExample.class) { System.out.println(String.format("当前执行线程:%s,执行时间:%s", Thread.currentThread().getName(), new Date())); TimeUnit.SECONDS.sleep(1); } } }
以上程序的执行结果如下:
从上述结果可以看出,虽然是不同的对象,但它们使用的仍然是同一把锁。