2010-04-05 58 views
0

區分我在我的程序下面的代碼:如何兩個線程

Thread getUsersist, getChatUsers; 

getUsersList = new Thread(this, "getOnlineUsers"); 
getUsersList.start(); 
getChatUsers = new Thread(this, "getChatUsers"); 
getChatUsers.start(); 

在run(),我想知道哪個線程使用的run()。如果它的「getOnlineUsers」我會做些什麼,如果它是「getChatUsers」,我會做其他事情。那麼我怎麼知道哪個線程正在使用run()?

+0

你是什麼意思,「使用run()」?你的意思是,哪個線程正在運行? – 2010-04-05 10:04:26

+0

是的。當我說* .start()時,它調用run()是不是。所以在run()我想知道哪個線程調用它。 – mithun1538 2010-04-05 10:05:37

回答

10

run(),你可以這樣做:

Thread.currentThread().getName() 

得到任何 「getOnlineUsers」 或 「getChatUsers」,並相應地採取不同的代碼路徑。也就是說,這對我來說似乎是一個相當脆弱的設計,我想你會比單獨的每個線程更好。

+1

你不需要'Thread.currentThread()'。 'run()'是Thread類後裔的一種方法。 – 2010-04-05 10:10:10

+3

但是這是一個'Runnable'而不是'Thread' – 2010-04-05 10:19:01

+3

+1,因爲注意到這種方法是粗略的,應該考慮更好的替代方案。 – 2010-04-05 10:19:14

3
if (getName().equals("getOnlineUsers")) { 
    doOneThing(); 
else if (getName().equals("getChatUsers")) { 
    doAnotherThing(); 
} else { 
    throw Up(); 
} 

編輯:忽略此答案。閱讀接受的答案。

+3

但他的代碼示例中的''this'是'Runnable',而不是'Thread'。 'getName()'不可用。 – 2010-04-05 10:18:28

+0

我試過這個,但只是做System.out.println(getName())給了我一些其他的線程名稱,而不是我需要的(「getOnlineUsers」,「getChatUSers」)。 – mithun1538 2010-04-05 10:26:21