草庐IT

Java 线程 : Is it possible view/pause/kill a particular thread from a different java program running on the same JVM?

我有一个运行不同线程的程序“foo”,fooT1、fooT2、..fooTn。现在如果我想写另一个程序“bar”,它可以杀死线程fooTr,这可能吗?原因:线程之一fooTr跟踪产品许可证。如果这个线程被杀死;可以无限期地运行该产品。杀死“foo”本身与“foo”一样是可以容忍的,因为这正是在许可证到期时所做的事情。系统:Linux的Fedora发行版注意:启动JVM和程序foo的命令放在/etc/init.d中,任何对rc.1/rc.2/rc.3结构有一定了解的人都可以更改/添加启动参数到这些。我希望我的问题很清楚。如果没有,我可以随时对其进行编辑。 最佳

Java Thread Serialization,为什么序列化的Thread Object可以启动

java中的线程在Java中是不能重启的,所以我自己实现了一个javaThread,然后在得到Thread的序列化对象后尝试重启线程。importjava.io.Serializable;publicclassThreadSerializationextendsThreadimplementsSerializable{intiCheck=10;@Overridepublicvoidrun(){System.out.println("STARTING");for(inti=0;i和序列化算法-publicclassCallingThreadSerializable{publicstati

java - "StringBuilders are not thread-safe"是什么意思?

我阅读了一些有关Java编程语言中String和StringBuilder优缺点的文章。在其中一篇文章中,作者提到:StringBuilderisnotThread-safe,soinmultiplethreadsuseStringBuffer.很遗憾,我无法理解这意味着什么。您能否解释一下String、StringBuilder和StringBuffer之间的区别,尤其是在“线程安全”的上下文中。如果您能用代码示例进行描述,我将不胜感激。 最佳答案 如果多个线程正在修改StringBuilder的同一个实例,结果可能会出乎意料-即

java - 如何通过另一个线程停止一个线程?

我在Java中遇到了线程问题,我有三个线程-thread1、thread2和thread3。那些在开始时正在做一些任务,我想通过thread1停止这两个线程。我将thread1用于sleep(500),然后我停止了两个线程,但是两个线程的进程仍在运行。你知道怎么做吗? 最佳答案 您打算如何阻止他们?Thread.stop?请注意,此方法已弃用。相反,考虑为线程1使用某种标志来与线程2和3通信,它们应该停止。事实上,你可以使用interrupts.下面,Thread.interrupt用于实现协调。finalThreadsubject

Java:为什么主线程没有进展?

我在使用多线程Java程序时遇到了一些问题,并将其提炼成一个非常简单的示例-我的困惑仍然不少!下面显示的示例程序。那么这是做什么的(或打算做什么)?好吧,main()函数从一个简单的线程开始,它基于一个静态的内部类Runnable。此Runnable包含两个嵌套循环,对局部变量“z”进行简单计算,总共进行10^12次迭代(10^6*10^6),然后打印出结果并退出。生成此工作线程后,主线程进入其自身的循环,在控制台中打印字符串“Z”,然后hibernate(使用Thread.sleep())1秒,然后一遍又一遍地重复此过程。所以运行这个程序,我希望它在计算线程执行它的工作时每1秒打印一

java - JLS 是否允许此指令重新排序?

根据Java语言规范(Example17.4-1),以下代码段(从A==B==0开始)...Thread1Thread2----------------r2=A;r1=B;B=1;A=2;...可能导致r2==2和r1==1。这是因为B=1;的执行结果不依赖于r2=A是否执行过,因此JVM可以自由调换执行这两条指令。换句话说,规范允许以下交错:Thread1Thread2----------------B=1;r1=B;A=2;r2=A;这显然导致r2==1和r1==1。我的问题:假设我们稍微调整一下示例:Thread1Thread2----------------r2=A;r1=B;

java - 交替运行两个线程的最佳方式?

更新:请参阅此问题的底部以获得完整答案。我想开一个副线程,让我的主线程和我的副线程交替进行操作(不是,我不想把所有的操作都放在主线程里,是为了单元测试)。我想出了两个不同的解决方案,我不知道哪个是最好的,我对第一个有疑问:使用交换器我想出了一些使用Exchanger的东西(虽然我不想只交换一个对象)。@TestpublicvoidlaunchMyTest(){/***Ananonymousclasstosetsomevariablesfromadifferentthread*/classThreadTestextendsThread{//declaresomevariousattrib

java - Thread.isInterrupted 不起作用,Thread.interrupted 起作用

下面的程序演示了这个问题(最新的JVM等等):publicstaticvoidmain(String[]args)throwsInterruptedException{//ifthisistrue,bothinterruptedandisInterruptedworkfinalbooleanwithPrint=false;//decidewhethertouseisInterruptedorinterrupted.//ifthisistrue,theprogramneverterminates.finalbooleanuseIsInterrupted=true;ExecutorServ

java - 如何无条件停止线程

有时我们必须在完全关闭整个JVM之前强制停止一个线程作为最大的努力。通常Thread#stop被引用为万无一失,即使是笨手笨脚和弃用的无条件停止线程的方法。然而,事实并非如此:流氓线程要保持自身运行所要做的就是捕获ThreadDeath或父类(superclass):publicstaticvoidmain(String[]args)throwsInterruptedException{finalThreadt=newThread(){publicvoidrun(){for(;;)try{Thread.sleep(Long.MAX_VALUE);}catch(Throwablet){S

java - Thread::yield 与 Thread::onSpinWait

好吧,标题基本上说明了一切,还有一点我真的很想知道什么时候使用它们。它可能很简单——我已经阅读了它们的文档,但仍然看不出它们的区别。有像this这样的答案这里基本上说:Yieldingalsowasusefulforbusywaiting...我不太同意他们的观点,原因很简单,ForkJoinPool在内部使用了Thread::yield,这是jdk世界中最近才添加的。真正困扰我的是在jdk中也有这样的用法(StampledLock::tryDecReaderOverflow):elseif((LockSupport.nextSecondarySeed()&OVERFLOW_YIELD