刚学习java不久,虽然以前学过C++,但是都学得不深入,今天接触了一下期待以久的线程,发现了很多很有趣的东西,然后马上上机尝试,发现了自己实在太落后了,一查jdk才发现现在的1.6版本作了很多修改,例如resume(),stop(),suspend(),countStackFrames(),destroy() 这些都已经过时了,这使我想到一个问题,首先是我自己看的书太旧了,如果把这些方法都删了,那么如何挂起一个线程,难道只用sleep()?这可是要确定时间,还有挂起了又如何唤醒呢?resume也没了,再说,又如何停止一个线程?难道就让它自动死掉?下面是我做的一个小试验:package CheviC_Thread;class T1 extends Thread
{
public T1()
{ } public void run()
{
for(int i=0;i<10;i++)
{
if(i==5)
{
try
{
Thread.sleep(2000);
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
System.out.println("i:"+i);
}
}
}class T2 extends Thread
{
public T2()
{ } public void run()
{
for(int i=0;i<10;i++)
{
System.out.println("j:"+i);
}
}
}public class MyThread
{ public static void main(String[] args)
{
T1 t1=new T1();
T2 t2=new T2();
t1.start();
t2.start(); }
};出现的结果(情况一):
i:0
j:0
i:1
j:1
i:2
j:2
i:3
j:3
i:4
j:4
j:5
j:6
j:7
j:8
j:9
i:5 //这里等了大概两秒后才出现
i:6
i:7
i:8
i:9
出现的结果(情况二):
i:0
i:1
i:2
i:3
i:4
j:0
j:1
j:2
j:3
j:4
j:5
j:6
j:7
j:8
j:9
i:5 //这里直接出现了.
i:6
i:7
i:8
i:9然而,我发现运行的结果有几个,意思是会有不同的结果出现,
我的猜想是因为运行时的CPU分工不同而导致这样的,
对于这个问题,我想请教各位java爱好者,大家一起来讨论下吧.
{
public T1()
{ } public void run()
{
for(int i=0;i<10;i++)
{
if(i==5)
{
try
{
Thread.sleep(2000);
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
System.out.println("i:"+i);
}
}
}class T2 extends Thread
{
public T2()
{ } public void run()
{
for(int i=0;i<10;i++)
{
System.out.println("j:"+i);
}
}
}public class MyThread
{ public static void main(String[] args)
{
T1 t1=new T1();
T2 t2=new T2();
t1.start();
t2.start(); }
};出现的结果(情况一):
i:0
j:0
i:1
j:1
i:2
j:2
i:3
j:3
i:4
j:4
j:5
j:6
j:7
j:8
j:9
i:5 //这里等了大概两秒后才出现
i:6
i:7
i:8
i:9
出现的结果(情况二):
i:0
i:1
i:2
i:3
i:4
j:0
j:1
j:2
j:3
j:4
j:5
j:6
j:7
j:8
j:9
i:5 //这里直接出现了.
i:6
i:7
i:8
i:9然而,我发现运行的结果有几个,意思是会有不同的结果出现,
我的猜想是因为运行时的CPU分工不同而导致这样的,
对于这个问题,我想请教各位java爱好者,大家一起来讨论下吧.
我写了个例子,出了点错误,不知道是为什么.大家看看.package CheviC_WaitThread;class T1 extends Thread
{
public T1()
{ }
public void run()
{
for(int i=0;i<10;i++)
{
if(i==5)
{
try
{
this.wait(2000);
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
System.out.println("i:"+i);
}
}
}
class T2 extends Thread
{
Thread t;
public T2(Thread t)
{
this.t=t;
}
public void run()
{
for(int i=0;i<10;i++)
{
if(i==5)
{
//唤醒T1
t.notify();
}
System.out.println("j:"+i);
}
}
}public class WaiteThread
{
public static void main(String[] args)
{
T1 t1=new T1();
T2 t2=new T2(t1);
t1.start();
t2.start();
}
};
而结果就是这样的:
i:0
i:1
j:0
j:1
j:2
j:3
j:4
i:2
i:3
i:4Exception in thread "Thread-1"
java.lang.IllegalMonitorStateException
java.lang.IllegalMonitorStateException
i:5
i:6 at java.lang.Object.notify(Native Method)i:7
at CheviC_WaitThread.T2.run(Waitethread.java:42)
i:8
i:9
java code
public class test{
public static void main(String [] args){
//.......
}}
java code
public class test{
public static void main(String [] args){
//.......
}}