第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從另一個類通知java線程

從另一個類通知java線程

蕪湖不蕪 2021-12-01 20:00:03
我有兩個類,第一個負(fù)責(zé)創(chuàng)建線程,然后需要從第二個類通知那些線程問題:我無法從第二個類中找到創(chuàng)建的線程,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貢獻(xiàn)1712條經(jīng)驗 獲得超3個贊

您的代碼有幾個問題:


1) 它打破了 Java 代碼約定:類名必須以大寫字母開頭


2) wait() 方法必須由擁有對象監(jiān)視器的線程調(diào)用,因此您必須使用以下內(nèi)容:


 synchronized (this) {   

             wait(); 

     }

3)notify() 方法必須由擁有對象監(jiān)視器的線程和與 wait() 相同的對象調(diào)用,在您的情況下是 OrderSessionsManager 的實例。


4) 由于您沒有指定 ThreadGroup,線程從它的父線程獲取它的 ThreadGroup。以下代碼按預(yù)期工作:


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線程與主線程在同一組中。


查看完整回答
反對 回復(fù) 2021-12-01
  • 1 回答
  • 0 關(guān)注
  • 357 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號