java - 如何将参数传递给java中已经运行的线程?

标签 java multithreading

如何在 java 中将参数传递给已经运行的线程——而不是在构造函数中,并且可能不使用 wait()(可能??)

类似于 How can I pass a parameter to a Java Thread? 中的评论

Do you mean passing a parameter to an already running thread ? Because all the current answers are about passing parameters to new threads... – Valentin Rocher May 18 '09 at 10:43

[编辑]

是的,我一直在寻找类似于生产者/消费者模式的东西。

我想要一个类似线程的东西,其中有处理并准备就绪 用于键盘输入。另一个线程只是监视网络并通过 将接收到的文本发送给处理线程。

最佳答案

也许你真正需要的是阻塞队列。当你创建线程时,你将阻塞队列传入,线程应该不断检查队列中是否有任何元素。在线程之外,您可以在线程“运行”时将元素放入队列。阻塞队列可以防止线程在无事可做时退出。

public class Test {
    public static void main(String... args) {

        final BlockingQueue<String> queue = new LinkedBlockingQueue<String>();
        Thread running = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {
                        String data = queue.take();
                        //handle the data
                    } catch (InterruptedException e) {
                        System.err.println("Error occurred:" + e);
                    }
                }
            }
        });

        running.start();
        // Send data to the running thread
        for (int i = 0; i < 10; i++) {
            queue.offer("data " + i);
        }
    }
}

关于java - 如何将参数传递给java中已经运行的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12049369/

相关文章:

javax.smartcardio 传输到 NFC USB 读卡器,无需卡

java - 如何在selenium中使用其属性及其文本来查找html标签?

Java 程序在扫描仪可以第二次接受输入之前关闭

在 boost::shared_ptr operator bool() 上旋转时需要 C++ volatile?

c# - 在 new Thread() 中创建控件时在正确的线程上调用方法

java - 在 Java 中创建两个线程

java - GearVRf 入门

java - getGlobalVisibleRect 当前可见屏幕

java - 在什么时候短 sleep 会增加而不是减少 CPU 利用率

c - 当套接字上可以进行 I/O 时通知线程