如何以编程方式检查两个线程是否属于相同或不同的进程?这是我写的代码片段:
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进程的一部分创建的。但是我如何以编程方式检查这个?
答案 0 :(得分:2)
您混合了线程和进程的概念。
线程t1被创建为进程TestThread1和线程t2的一部分 作为TestThread2的一部分创建
您的TestThread2
和t1
只是runnables,它保存信息应由线程执行的操作。您的t2
和 func didBeginContact(contact: SKPhysicsContact) {
let collision: UInt32 = contact.bodyA.categoryBitMask |
contact.bodyB.categoryBitMask
if collision == PhysicsCategory.player | PhysicsCategory.wall {
} else if collision ==
PhysicsCategory.player | PhysicsCategory.box {
player.setJump(true)
} else if collision ==
PhysicsCategory.player | PhysicsCategory.floor {
player.setJump(true)
}
if collision ==
PhysicsCategory.laser | PhysicsCategory.wall {
effects = SKEmitterNode(fileNamed: "Explosion.sks")
addChild(effects!)
laser!.removeFromParent()
}
else if collision ==
PhysicsCategory.laser | PhysicsCategory.floor {
effects = SKEmitterNode(fileNamed: "Explosion.sks")
addChild(effects!)
laser!.removeFromParent()
}
是实际线程,它们在同一个进程中运行,因为您在一个应用程序中启动它们。应用程序中的所有线程都在同一个java进程中运行,因此您不会遇到两个线程引用并且它们属于不同进程的情况。
如果你启动另一个java应用程序,它将在不同的进程中运行,但你无法在单个上下文中比较来自不同进程的两个线程。
答案 1 :(得分:2)
您对术语的理解或使用存在问题。
据我所知,线程
t1
是作为流程TestThread1
的一部分创建的,线程t2
是作为TestThread2
流程的一部分创建的。
首先,一些术语:
TestThread1
和TestThread2
是不是流程的类。
obj1
和obj2
中的值也不是进程。它们分别是TestThread1
和TestThread2
类的实例。
如果我正确地解释了您的问题,您实际上是在询问是否有办法找出t1
和t2
是否共享一个Runnable
实例。不幸的是,在纯Java中没有办法做到这一点。 Thread
对象Runnable
是一个私有字段,并且没有用于检索 1 的公共getter。
另一方面,如果您真的询问流程......
运行应用程序时,只有一个进程,并且两个线程都属于它。
1 - 可以使用讨厌的反射来检索私有字段的值,但这是一个坏主意。您应该寻找一种方法来做任何你想做的事情而不需要进行这项测试...
答案 2 :(得分:0)
也许有一种更简单的方法,但您可以在线程上调用getStackTrace()
然后检查它(搜索run
方法的框架)。但是,这仅适用于实时线程。
PS你在这里使用了错误的术语,你所指的不是一个过程,它只是一个定义由线程执行的run
方法的类。