2012-11-19 29 views
2

我想编写一个程序,其中两个单独的线程运行两个对象,一个线程等待执行其代码,直到它由另一个线程发出信号。在Java中通过类共享条件和锁变量

现在要做到这一点,我想使用Condition接口。

我无法弄清楚在我的代码中声明lockcondition变量的位置,这样两个类都可以访问它。

我想问的是,线程如何共享lockcondition变量,以确保它们在发送信号并等待相同的条件。

回答

2

线程必须有某种连接才能工作。如果线程1引用了线程2,则锁定和条件变量可能位于线程2中,反之亦然。

如果不是,变量必须位于两个线程均可访问的单独类中。因此,您必须将该类的同一个实例传递给两个线程,以便实例成为共享资源。以下示例假设您有类Thread1以及与构造以SharedResource作为参数继承Thread Thread2

SharedResource sr = new SharedResource(); 
Thread1 t1 = new Thread1(sr); 
Thread2 t2 = new Thread2(sr); 
t1.start(); 
t2.start(); 
+1

确定。所以如果我在一个类中声明了锁定和条件变量为final,然后将该类的一个实例传递给第二个类,那么它会是正确的。在这种情况下,这两个类都可以访问相同的锁和条件变量吗? – Aditya

+0

@Aditya检查更新的答案 – ddmps

+0

我会对此进行投票,只是扩展'Thread'通常被认为是一个坏主意,因为程序员错误的潜在可能性...更好地实现'Runnable' – artbristol