通过编程检查两个线程是否属于Java中的同一进程
如何通过编程检查两个线程是否属于相同或不同的进程?这是我写的一段代码:通过编程检查两个线程是否属于Java中的同一进程,java,multithreading,Java,Multithreading,如何通过编程检查两个线程是否属于相同或不同的进程?这是我写的一段代码: public class MyThread { public static void main(String[] args) { TestThread1 obj1 = new TestThread1(); TestThread2 obj2 = new TestThread2(); System.out.println("Current thread:" + Threa
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());
}
}
}
公共类读取{
公共静态void main(字符串[]args){
TestThread1 obj1=新的TestThread1();
TestThread2 obj2=新的TestThread2();
System.out.println(“当前线程:+thread.currentThread().getName());
螺纹t1=新螺纹(obj1);
t1.start();
螺纹t2=新螺纹(obj2);
t2.start();
}
}
类TestThread1实现可运行{
@凌驾
公开作废运行(){
对于(int i=0;i可能有一种更简单的方法,但是您可以在线程上调用getStackTrace()
,然后检查它(搜索run
方法的框架)。但是,这只适用于活动线程
PS您在这里使用了错误的术语,您所指的不是进程,它只是一个定义线程执行的run
方法的类。您混合了线程和进程的概念
作为进程TestThread1和线程t2的一部分创建的线程t1
正在作为TestThread2的一部分创建
您的TestThread1
和TestThread2
只是可运行的,它们包含线程应该执行的操作的信息。您的t1
和t2
是实际的线程,它们在同一个进程中运行,因为您是在一个应用程序中启动它们的。应用程序中的所有线程都在同一个java进程中运行,因此您不能假设有两个线程引用,它们属于不同的进程
如果启动另一个java应用程序,它将在不同的进程中运行,但您无法在单个上下文中比较来自不同进程的两个线程。您对术语的理解或使用有问题
这里我理解的是线程t1
作为进程TestThread1
的一部分创建,线程t2
作为进程TestThread2
的一部分创建
首先,一些术语:
TestThread1
和TestThread2
是类而不是进程
obj1
和obj2
中的值也不是进程。它们分别是TestThread1
和TestThread2
类的实例
如果我正确地解释了您的问题,您实际上是在问是否有办法确定t1
和t2
是否共享一个Runnable
实例。不幸的是,在纯Java中没有办法做到这一点。Thread
对象的Runnable
是一个私有字段,没有公共getter检索它1
另一方面,如果你真的在问流程
运行应用程序时,只有一个进程,两个线程都属于它
1-可以使用讨厌的反射来检索私有字段的值,但这不是一个好主意。你应该寻找一种方法来做任何你想做的事情,而不需要进行此测试…我不确定我是否理解这个问题。如果两个线程都存在于JRE中,那么它们都是同一Java进程的一部分。也就是说,即使这个类是从两个不同的VM运行的,VM关于其他VM线程的唯一知识是通过IPC。你的问题还不清楚。你似乎误解了进程和线程的含义。而且,对象不属于线程。java也不考虑哪个线程创建了其他线程。没有父子关系。我的坏。,措词不正确。让我关闭此线程,然后打开另一个。@vmr编辑此线程如何..?属于同一进程的所有线程都共享系统资源,如堆内存和其他资源,但每个线程都有自己的异常处理程序和堆栈。你说得对,我感到困惑。谢谢你解决这个问题。