-6

通过创建 Thread 的子类,然后从主类创建、初始化和启动两个 Thread 对象来创建多线程程序。线程将在合适的接口中执行以下输出。

OUTPUT :
thread1: Java
thread1: is
thread2: Java
thread1: an
thread2: is
thread1: 令人兴奋
thread2: an
thread1: new
thread2: 令人兴奋
thread1: 语言
thread1: for
thread1: 并发
thread2: new
thread1: 编程。
thread2: 语言
thread2: for
thread2: 并发
thread2: 编程。

这是我的编码似乎先调用线程 1,然后调用线程 2。如何让它像输出一样显示。

class Thread1 extends Thread {

    public void run() {
        System.out.println("Thread1: Java");
        System.out.println("Thread1: is ");
        System.out.println("Thread1: exciting ");
        System.out.println("Thread1: new ");
        System.out.println("Thread1: language ");
        System.out.println("Thread1: for ");
        System.out.println("Thread1: concurrent ");
        System.out.println("Thread1: programming ");

    }
}

class Thread2 extends Thread {

    public void run() {
        System.out.println("Thread2 Java");
        System.out.println("Thread2: an ");
        System.out.println("Thread2: is ");
        System.out.println("Thread2: an ");
        System.out.println("Thread2: exciting");
        System.out.println("Thread2: new");
        System.out.println("Thread2: language");
        System.out.println("Thread2: for");
        System.out.println("Thread2: concurrent");
        System.out.println("Thread2: programming");
        suspend();
    }
}
class Thread3 extends Thread
{
public void run()
{
System.out.print("Thread3");
try
        {
sleep(1000);
}
catch(Exception e)
{
}

System.out.print(" Running");
}
}

class ThreadDemo3
{
public static void main(String args[]) throws InterruptedException
{
Thread1 obj1 = new Thread1();
obj1.start();
Thread2 obj2 = new Thread2();
obj2.start();

}
}
4

2 回答 2

1

执行它直到你得到想要的结果。

不认真,这是一个典型的例子,表明线程不特定顺序执行。

因此,每次运行程序时,程序的输出都应该不同(不可预测)。但你试图做到这一点。

一种解决方案可能是使用您获取的锁(请参阅synchronized),当另一个线程应该完成工作时释放它(请记住添加某种等待以防止线程立即重新获取锁),但这会适得其反这里。

顺便说一句:在我看来,这就像您将作业复制到 SO 一样。

编辑:获取一台较旧的机器,当新线程启动时,第一个线程尚未完成。

真的,预测命令执行的顺序就像玩轮盘赌一样。你可以试试,但最后你会松懈的。

于 2013-03-05T15:29:09.057 回答
0

没有不乱的方式来做这种疯狂的事情。如果我被迫在枪口下这样做,我可能会让每个线程运行一个 switch/case 状态机,当需要线程交换时,向另一个线程发出信号量并等待另一个信号量的状态-机发回信号。

于 2013-03-05T15:34:29.007 回答