如何运行一个接一个的线程?

时间:2014-04-16 09:04:04

标签: java multithreading

创建三个线程和主线程。将每个线程作为同步任务执行。退出每个线程时显示信息。

enter image description here

我可以通过上面的练习运行两个线程,但很难有三个线程。这是我的计划。

package Thread;

import java.util.concurrent.atomic.AtomicBoolean;

公共课测试{

static AtomicBoolean lock = new AtomicBoolean(false);

public static void main(String[] args) {

    Thread t1 = new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("New Thread: "
                    + Thread.currentThread().toString());
            for (int i = 5; i > 0; i--) {
                synchronized (lock) {
                    if (lock.get()) {
                        try {
                            lock.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    System.out.println("First: " + i);
                    if (i == 1) {
                        System.out.println("Second exiting.");
                    }
                    lock.set(true);
                    lock.notify();
                }
            }
        }
    });

    Thread t2 = new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("New Thread: "
                    + Thread.currentThread().toString());
            for (int i = 5; i > 0; i--) {
                synchronized (lock) {
                    if (!lock.get()) {
                        try {
                            lock.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    System.out.println("Second: " + i);
                    if (i == 1) {
                        System.out.println("Second exiting.");
                    }
                    lock.set(false);
                    lock.notify();
                }
            }
        }
    });

    t1.start();
    t2.start();

    try {
        t1.join();
        t2.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    System.out.println("Main thread exiting.");
}

}

结果:

enter image description here

您能否给我一些方法或提示来解决此问题。谢谢你的回复!

3 个答案:

答案 0 :(得分:1)

目前还不清楚你想要三个线程做什么。你有两个线程 一个等待bool是假的,一个等待它是真的,对吧? 有三个线程,您需要等待三个状态。你也需要 非常小心地设置它以便状态转换完全发生 以正确的顺序和一定的时间。

要么尝试编写该程序,并告诉我们出了什么问题,或者如果你想要的话 设计有助于告诉我们更多关于你想要实现的目标 结束。

建议您是否有需要解决的真正多线程问题 是看queues之类的东西。它们是非常好的高级抽象 这使得使用线程更好。

更有可能的是,你有一些需要解决的人工任务 你需要谈谈你所遇到的限制。

答案 1 :(得分:0)

阅读有关ThreadJava同步的教程here

答案 2 :(得分:0)

公共类同步扩展了线程{

public void run() {

    synchronized (this) {
        for (int i = 5; i > 0; i--) {
            System.out.print("Thread Name :" + Thread.currentThread().getName() + i+"\n");
        }
    }
}

}

课程演示{

public static void main(String args[]) {
    sync obj1 =new sync();
    sync obj2 =new sync();
    sync obj3 =new sync();
    obj1.setName("First");
    obj2.setName("Second");
    obj3.setName("Third");
    obj1.start();
    obj2.start();
    obj3.start();
}

}

O/p:

主题名称:First5 主题名称:First4 主题名称:First3 线程名称:First2 线程名称:First1 线程名称:Second5 线程名称:Second4 线程名称:Second3 线程名称:Second2 线程名称:Second1 主题名称:Third5 主题名称:Third4 主题名称:Third3 主题名称:Third2 主题名称:Third1

希望这有助于:)