繁体   English   中英

java 2 线程 依次打印数字

[英]java 2 Threads Printing numbers in sequence

我正在尝试使用 2 个线程按顺序打印 1 到 10。

这是代码。

public class Multithreading implements Runnable {
    private static volatile Integer count = 1;
    private static volatile String threadId = "1";

    Object object = new Object();
    @Override
    public void run() {
        try {
            while (count <= 10) {
                synchronized (object) {
                    if(!Thread.currentThread().getName().equals(threadId)) {
                        object.wait();
                    }
                    else {
                        System.out.println(Thread.currentThread().getName()+" "+ count);
                        count++;
                        if(threadId.equals("1"))
                            threadId = "2";
                        else threadId = "1";
                        object.notifyAll();
                    }
                }
            }
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Multithreading t1m = new Multithreading();
        Multithreading t2m = new Multithreading();
        Thread t1 = new Thread(t1m);
        Thread t2 = new Thread(t2m);

        t1.setName("1");
        t2.setName("2");
        t1.start();
        t2.start();
    }
}

但是在打印第一个线程打印 1 之后,两个线程都会等待。

我正在尝试在没有嵌套内部 class 的两个线程的序列解决方案中实现这 3 个线程打印数字 任何帮助将不胜感激。

object变量是成员变量。 您的Multithreading class 的每个实例都在创建、同步、等待和通知自己不同的object 也许您的意思是让object成为static变量?


编辑:

你引用的问题中monitor变量是一个成员变量——就像你的object一样——但代码只创建了monitor出现的 class 的一个实例。 所有线程共享同一个monitor object变量在该问题的最受好评的答案中也是如此。 在该答案中,所有线程共享相同的object

从这些示例中摆脱内部 class 的方式导致每个线程都有自己的独立object

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM