[英]Programatically check if two threads belong to the same process in Java
如何以編程方式檢查兩個線程是否屬於相同或不同的進程? 這是我編寫的代碼:
public class MyThread {
public static void main(String[] args) {
TestThread1 obj1 = new TestThread1();
TestThread2 obj2 = new TestThread2();
System.out.println("Current thread:" + Thread.currentThread().getName());
Thread t1 = new Thread(obj1);
t1.start();
Thread t2 = new Thread(obj2);
t2.start();
}
}
class TestThread1 implements Runnable {
@Override
public void run () {
for(int i=0; i<1000 ;i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
System.out.println("Current thread:" + Thread.currentThread().getName());
}
}
}
class TestThread2 implements Runnable {
@Override
public void run () {
for(int i=0; i<1000 ;i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
System.out.println("Current thread:" + Thread.currentThread().getName());
}
}
}
在這里,我了解的是線程t1作為進程TestThread1的一部分創建,線程t2作為TestThread2進程的一部分創建。 但是,我如何以編程方式檢查此內容?
您混合了線程和進程的概念。
線程t1作為進程TestThread1的一部分創建,線程t2作為TestThread2的一部分創建
您的TestThread1
和TestThread2
只是可運行的,它們包含有關信息應由線程執行的操作的信息。 t1
和t2
是實際線程,它們在同一進程中運行,因為您是在一個應用程序中啟動它們的。 應用程序中的所有線程都在同一個Java進程中運行,因此,您不可能有兩個線程引用並且它們屬於不同進程的情況。
如果啟動另一個Java應用程序,它將在不同的進程中運行,但是您將無法在單個上下文中比較來自不同進程的兩個線程。
您的理解或術語使用存在問題。
在這里,我了解的是線程
t1
作為進程TestThread1
一部分創建,線程t2
作為TestThread2
進程的一部分創建。
首先,一些術語:
TestThread1
和TestThread2
是類而不是進程。
obj1
和obj2
中的值也不是進程。 它們分別是TestThread1
和TestThread2
類的實例。
如果我正確解釋了您的問題,您實際上是在詢問是否有一種方法可以找出t1
和t2
共享一個Runnable
實例。 不幸的是,純Java沒有辦法做到這一點。 Thread
對象的Runnable
是一個私有字段,沒有公共的獲取方法來獲取它1 。
另一方面,如果您真的在詢問流程...
當您運行該應用程序時,將只有一個進程,並且兩個線程都屬於該進程。
1-可以使用討厭的反射來檢索私有字段的值,但這不是一個好主意。 您應該尋找一種方法來做您想做的所有事情,而這並不需要此測試...
也許有一種更簡單的方法,但是您可以在線程上調用getStackTrace()
然后對其進行檢查(搜索run
方法的框架)。 但是,這僅適用於活動線程。
PS在這里您使用了錯誤的術語,您所指的不是一個進程,它只是一個定義了由線程執行的run
方法的類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.