【发布时间】:2017-01-26 10:44:15
【问题描述】:
我正在使用这三个类测试多线程的概念。
这个类由线程执行的方法组成。
class MainClass {
static MainClass mainClass;
String name = "Sibendu";
MainClass()
{
mainClass = this;
}
public static void main(String args[])
{
new MainClass();
ThreadImpl thread = new ThreadImpl(mainClass);
ThreadImpl2 thread2 = new ThreadImpl2(mainClass);
thread.start();
thread2.start();
}
public void printMyName() throws InterruptedException {
String name = "Sibendu";
synchronized (name) {
System.out.println("Inside printMyName()");
Thread.sleep(4000);
System.out.println(name);
}
}
public void printMyName2() throws InterruptedException {
synchronized (name) {
System.out.println("Inside printMyName2()");
Thread.sleep(4000);
System.out.println(name);
}
}
}
两个线程:
class ThreadImpl extends Thread {
MainClass mainClass = null;
ThreadImpl( MainClass mainClass) {
this.mainClass = mainClass;
}
@Override
public void run() {
try {
mainClass.printMyName();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class ThreadImpl2 extends Thread
{
MainClass mainClass = null;
ThreadImpl2(MainClass mainClass) {
this.mainClass = mainClass;
}
@Override
public void run() {
try {
mainClass.printMyName2();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
同步块位于两个不同的变量上。 其中一个是本地的,另一个是 MainClass 的实例变量。
我的问题是,即使同步是在两种不同类型的变量上执行的。为什么“thread2”一直处于等待状态,直到thread1完成操作?
我已经验证了输出。这是输出:
内部 printMyName() 西本杜 内部 printMyName2() 西本都
【问题讨论】:
标签: java multithreading