为了账号安全,请及时绑定邮箱和手机立即绑定

从另一个类通知java线程

从另一个类通知java线程

芜湖不芜 2021-12-01 20:00:03
我有两个类,第一个负责创建线程,然后需要从第二个类通知那些线程问题:我无法从第二个类中找到创建的线程,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() {}@Overridepublic 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;    }}
查看完整描述

1 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

您的代码有几个问题:


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线程与主线程在同一组中。


查看完整回答
反对 回复 2021-12-01
  • 1 回答
  • 0 关注
  • 324 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信