日期:2014-05-20  浏览次数:20707 次

java线程测试-一个奇怪的状况-执行未完成直接结束了
import org.junit.Test;

/**
 * 同步线程测试
 * @author jview
 *
 */
public class testSynchronized {
@Test
public void testSynchronizedThread(){
System.out.println("-------testSynchronizedThread----");
Thread t1 = new Thread(new TheardTest("t1"));
t1.start();
Thread t2 = new Thread(new TheardTest("t2"));
t2.start();
System.out.println("-------testSynchronizedThread-end---");
}
}

class TheardTest implements Runnable{
public TheardTest(){

}
public TheardTest(String name){
this.name=name;
}
private String name;
public void run(){
if(name!=null)
System.out.println("----thread-name="+name);

SyncTest st = new SyncTest();
st.sleep4();
}
}

class SyncTest{
public synchronized void sleep4(){
try {
System.out.println("-------sleep4--");
Thread.sleep(4000);
System.out.println("-------sleep4-end-");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


多次执行结果不一样
结果1:
-------testSynchronizedThread----
-------testSynchronizedThread-end---
----thread-name=t1
-------sleep4--

结果2:
-------testSynchronizedThread----
-------testSynchronizedThread-end---
----thread-name=t2
-------sleep4--
----thread-name=t1
-------sleep4--

结果3:
-------testSynchronizedThread----
-------testSynchronizedThread-end---
----thread-name=t2


不加synchronized 实际运行效果也一样,都是这样子的
线程执行没结束就退出了。
------解决方案--------------------
main方法呢
------解决方案--------------------
用junit测试就会这样。
简单处理的话加上下面这个方法即可。
public void tearDown(){
    System.in.read();
}
------解决方案--------------------
还是在主函数里创建对象再调用吧