java - 如何让线程一个接一个地运行?

标签 java multithreading

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

enter image description here

通过上述练习,我可以运行两个线程,但很难运行三个线程。这是我的程序。

package Thread;

导入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

你能给我一些解决这个问题的方法或技巧吗?谢谢您的回复!

最佳答案

目前还不清楚您想要三个线程做什么。有两个线程 一个等待 bool 为 false,一个等待 bool 为 true,对吗? 对于三个线程,您需要三种状态来等待。你还需要成为 非常小心地设置它,以便状态转换准确地发生 以正确的顺序和设定的次数。

要么尝试编写该程序,然后告诉我们出了什么问题,或者如果您愿意 设计帮助最好告诉我们更多关于您想要实现的目标 结束。

如果您有真正的多线程问题需要解决,请提供建议 就是研究类似 queues 的东西。它们是非常好的高级抽象 这使得线程的使用变得更好。

更有可能的是,您有一些需要解决的人工任务,然后 您需要谈谈您所面临的限制。

关于java - 如何让线程一个接一个地运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23104709/

相关文章:

python - 并行azure blob上传收到警告 'urllib3.connectionpool WARNING - Connection pool is full, discarding connection'

asp.net - 将 ThreadPool 线程与长时间运行的 ADO.NET 查询一起使用。这是可扩展的吗?

python - 线程问题 使用线程时 Kivy 图像纹理不更新

java - 添加 pacman 图像

java - 单击树时如何从 JTree 获取节点路径?

java - 如何计算 Java 8 中嵌套类结构中属性的总和?

java - 外围 Java 线程方法的后台工作对调用线程的影响

java - 没有企业支持,Scala 能否生存?

java - 使用递归方法获取因子

c# - BackgroundWorker 中未处理的异常