从另一个类通知java线程

卡梅尔·扎丹

我有两个类,第一个负责创建线程,然后需要从第二个类通知这些线程

问题:我无法从第二个类中找到创建的线程,getThreadByName() 总是返回 null,Any Idea?。

头等舱

public class class1{
    protected void createThread(String uniqueName) throws Exception {

        Thread thread = new Thread(new OrderSessionsManager());
        thread.setName(uniqueName);
        thread.start();

    }
}

订单会话管理器

public class OrderSessionsManager implements Runnable {

public OrderSessionsManager() {

}

@Override
public void run() {
    try {
        wait();
    }catch(Exception e) {
        e.printStackTrace();
    }

}

二等舱

public class class2{
    protected void notifyThread(String uniqueName) throws Exception {

        Thread thread = Utils.getThreadByName(uniqueName);
        thread.notify();

    }
}

实用程序

public class Utils{
    public static Thread getThreadByName(String threadName) {

        ThreadGroup currentGroup = Thread.currentThread().getThreadGroup();
        int noThreads = currentGroup.activeCount();
        Thread[] threads = new Thread[noThreads];
        currentGroup.enumerate(threads);
        List<String>names = new ArrayList<String>();

        for (Thread t : threads) {
            String tName = t.getName().toString();
            names.add(tName);
            if (tName.equals(threadName)) return t;
        }
    return null;
    }
}
用户10527814

您的代码有几个问题:

1) 它打破了Java 代码约定:类名必须以大写字母开头

2) wait() 方法必须由拥有对象监视器的线程调用,因此您必须使用以下内容:

 synchronized (this) {   
             wait(); 
     }

3)notify() 方法必须由拥有对象监视器的线程和与 wait() 相同的对象调用,在您的情况下是 OrderSessionsManager 的实例。

4) 由于您没有指定 ThreadGroup,线程从它的父线程获取它的 ThreadGroup。以下代码按预期工作:

public class Main {
    public static void main(String[] args) {
        class1 c1 = new class1();
        try {
            c1.createThread("t1");
        } catch (Exception e) {
            e.printStackTrace();
        }
         Thread thread = Utils.getThreadByName("t1");
         System.out.println("Thread name " + thread.getName());
    }
}

但这只是因为t1线程与主线程在同一组中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通知线程停止-在另一个线程和类中引发事件-C#

来自分类Dev

如何冻结一个线程并从另一个线程通知它?

来自分类Dev

android:从另一个类中的另一个线程更新UI

来自分类Dev

线程安全:JFrame和另一个类

来自分类Dev

在另一个类的UI线程上运行

来自分类Dev

当另一个线程通知线程执行时,该线程在哪里开始执行?

来自分类Dev

java:将类引用传递给另一个线程

来自分类Dev

如何将GUI文件作为Java中另一个类的线程运行?

来自分类Dev

如何从另一个类扩展类(Java)

来自分类Dev

java类销毁的另一个类

来自分类Dev

C#/ WPF从另一个类中创建的另一个线程更新UI

来自分类Dev

android 视图未从另一个类和另一个线程更新

来自分类Dev

发信号通知同一进程中的另一个线程

来自分类Dev

如何在另一个线程上接收NSWorkspace和可访问性通知

来自分类Dev

Python-通知另一个线程在子进程上被阻塞

来自分类Dev

QSocketNotifier:套接字通知程序不能从另一个线程启用或禁用

来自分类Dev

从另一个Java类调用静态方法

来自分类Dev

从Java中的另一个类访问变量

来自分类Dev

在JAVA中访问另一个类变量

来自分类Dev

从另一个Java类更新数组

来自分类Dev

Java jbutton在另一个类中

来自分类Dev

从Java程序调用另一个类

来自分类Dev

Java Applet从另一个类重绘

来自分类Dev

从Java中的另一个类获取数组

来自分类Dev

使用Java从另一个类调用变量

来自分类Dev

调用Java中的另一个类

来自分类Dev

对象使用另一个Java类

来自分类Dev

从Java中的另一个类存储数组

来自分类Dev

从Java中的另一个类访问变量