Java线程同步与对象锁

Java编程中,线程同步是一个重要的概念,它确保了多个线程在访问共享资源时的一致性和完整性。本文将通过一个简单的示例程序来解释线程同步的概念,特别是如何使用对象锁来实现同步。

什么是对象锁

Java中,每个对象都有一个与之关联的锁。当一个线程需要访问某个对象的同步代码块或同步方法时,它必须先获取该对象的锁。如果锁已经被其他线程持有,则该线程将被阻塞,直到锁被释放。这种机制确保了一次只有一个线程能够执行同步代码块或方法,从而避免了并发访问共享资源时可能出现的问题。

示例程序

以下是一个使用对象锁进行线程同步的示例程序。在这个程序中,创建了一个名为processor的类,它实现了Runnable接口。这个类有一个名为objectLock的成员变量,用于在运行时锁定同步代码块。

class Processor implements Runnable { Object objectLock; public Processor() { objectLock = new Object(); } public void run() { display(); } public void display() { synchronized (objectLock) { for (int i = 0; i <= 5; i++) { System.out.println("i = " + i + " In thread" + Thread.currentThread()); } } } }

在主类Locks中,创建了一个Processor对象,并基于这个对象创建了两个线程t1t2。这两个线程共享同一个objectLock,因此它们将按照对象锁的规则进行同步。

class Locks { public static void main(String[] args) { Processor p1 = new Processor(); Thread t1 = new Thread(p1, "t1"); Thread t2 = new Thread(p1, "t2"); t1.start(); t2.start(); } }

程序输出

程序的输出如下,展示了两个线程如何依次执行同步代码块:

i = 0 In threadThread[t1, 5, main] i = 1 In threadThread[t1, 5, main] i = 2 In threadThread[t1, 5, main] i = 3 In threadThread[t1, 5, main] i = 4 In threadThread[t1, 5, main] i = 5 In threadThread[t1, 5, main] i = 0 In threadThread[t2, 5, main] i = 1 In threadThread[t2, 5, main] i = 2 In threadThread[t2, 5, main] i = 3 In threadThread[t2, 5, main] i = 4 In threadThread[t2, 5, main] i = 5 In threadThread[t2, 5, main]

同步机制的要点

通过这个示例,可以看到对象锁如何确保依赖于同一对象的所有线程同步。在本例中,objectLock属于p1对象,而所有线程(即t1t2)都是基于p1创建的。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485