刚学习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爱好者,大家一起来讨论下吧.

解决方案 »

  1.   

    可以用this.wait(),挂起线程,然后再this.notify(),唤醒在等待队列 中的线程。--个人见解
      

  2.   

    这个可以,但是如果是在别的线程里面唤醒呢?
    我写了个例子,出了点错误,不知道是为什么.大家看看.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
      

  3.   

    只为测试一下
    java code 
    public class test{
       public static void main(String [] args){
       //.......
       }}
      

  4.   

    只为测试一下
    java code 
    public class test{
       public static void main(String [] args){
       //.......
       }}