Java一个线程对另一个线程实现控制运行和终止,但不影响两个线程的独立运行?

准备做一个带界面(例使用swing或者javaFX)的定时器,
因为界面相当于开了一个线程我们默认为线程A,计时器倒计时的线程为线程B
线程A负责监听界面的事件,以此来决定线程B的执行和终止
方案一:线程A中监听到事件直接调用线程B,此时线程A会挂起,整个界面需要等线程B完成才能有响应,无法中途终止计时
方案二:线程A与线程B相互wait和Notify实现来回切换,这样计时会不准确

所以怎么样才能在界面决定开始计时后,线程B能默默计时,同时界面仍然可以对线程B实现停止的操作???

1个回答

一、线程A在while循环中使用Thread.sleep(100)方法睡眠,醒来后检查计时器
二、javafx有定时器,可以使用它一秒触发一次计时更新,不一定需要线程B

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
终止正在运行的线程
在.NET Compact Framework中,Thread没有Abort()方法,那么我如何强行终止正在运行的线程呢?
终止运行线程的注意事项
终止运行线程 1. 线程函数返回。 2. 线程通过调用ExitThread函数“杀死”自己(避免使用)。 3. 同一个进程或另一个进程中的线程调用TerminateThread函数(避免使用) 4. 包含线程的进程终止运行(避免使用)   让线程函数返回,可以确保: 1. 线程函数中创建的所有C++对象都通过其析构函数被正确的销毁; 2. 操作系统正确释放线程栈使用的内存; ...
怎样终止运行的线程
我在winForm里new了类,并用线程启动了类里的方法,此方法启动了一个system.timers.timer,来反复执行某操作。同时,把这个线程存到了列表里。rn当按下winForm上的某个按钮时,我想中止此线程,就是从列表里取出线程,并abort之。但线程还是在反复运行。为什么?怎么办?rnrn[code=C#]rnrnforeach (...)rn rn rn WorkThread workThread = new WorkThread(...);rn System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(workThread.Start));rn thread.IsBackground = true;rn thread.Start();rn this.runningThreads.Add(thread);rn rn rnrnprivate void button1_Click(object sender, EventArgs e)rn rn foreach (System.Threading.Thread thread in this.runningThreads)rn rn thread.Abort();rn rn rn[/code]
怎样在实现一个线程中对另一个线程终止
用什么方法,我要做的是如果这个线程已经达到我要的条件,我就先结束另外一个线程,再结束自己的线程
关于一个线程终止另一个线程?
我用beginthread创建2个线程是一个2台机子的write程序,一个是读数据一个是写数据。如果我在读的过程中发现问题(如对方已经断开)的时候,我怎么在读的线程中终止写的进程呢?
一个线程如何终止另一个线程
#include rn#include rn#include rn#include rn#include rn#include rnrnrntypedef struct arg ARG;rnstruct argrn int arg_1;rn;rnrnvoid *f(void *arg)rnrnrn pthread_t tid;rn tid=pthread_self();rn int i;rnrnrn ARG *p=(ARG *)arg;rn for(i=0;i<10000000;i++)rn if(p->arg_1==i) rn printf("%d\n",p->arg_1);rn pthread_exit((void*) 1);rn [color=#FF0000]//我想此时把线程2也终止了,如果用pthread_cancel的话不知道另外一个线程的id[/color]rn elsern return NULL;rn rn rnrnrnrnint main()rnrnrn pthread_t tid_1,tid_2;rn ARG myarg_1,myarg_2;rn int err;rn void *res_1,*res_2;rnrn tid_1=pthread_self();rnrn myarg_1.arg_1=10;rnrnrn //创建第一个线程rn err=pthread_create(&tid_1,NULL,f,(void *)&myarg_1);rn if(err!=0)rn printf("%s\n",strerror(err));rn exit(1);rn rnrnrn tid_2=pthread_self();rn myarg_2.arg_1=1000000;rnrnrn //创建第二个线程rn err=pthread_create(&tid_2,NULL,f,(void *)&myarg_2);rn if(err!=0)rn printf("%s\n",strerror(err));rn exit(1);rn rnrnrnrn err=pthread_join(tid_1,&res_1);rn err=pthread_join(tid_2,&res_2);rnrn return 0;rnrnrn比如上面的例子,我调用两个线程分别传两个不同的值过去,我想在满足10的时候就终止所有线程,终止该线程本身,我知道,但是终止另外一个线程怎么做。
【Linux】线程控制-线程终止
如果需要只终⽌某个线程⽽不终⽌整个进程,可以有三种⽅法: 1. 从线程函数return。这种⽅法对主线程不适⽤,从main函数return相当于调⽤exit。 #include &amp;lt;stdio.h&amp;gt; #include&amp;lt;unistd.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; #include&amp;lt;pthread.h&amp;gt; void* thr_start...
关于串口读写时,启动两个线程,一个线程不停运行,另一个线程无法运行的问题?
我的程序是接收串口传来的数据,放入一个自定义Buffer,另一个线程不停检查Buffer是否有数据,如果有,就取出通过Socket传送到Server,Server处理完成传回的数据通过Socket接收后再写到串口。rnrn我为了监视串口,用_beginthread启动了一个辅助线程,它会检查是否有数据放入串口的input buffer,如果有就每次按一定长度接收,收完后,将数据放入上面提到的那个自定义Buffer中。rnrn可现在如果这个检查串口的辅助线程运行后,就反复循环等串口来数据,而另一个线程就没法运行了:(,怎么办呢?rnrn下面是辅助线程的部分代码:rnrn comWin32->SetEventCharacter(0x16);rn comWin32->SetEventMask(EV_RXCHAR );rn HANDLE events[] = comWin32->GetComEventHandle();rn for(;;) rn waitEv = WaitForMultipleObjects(sizeof(events) / sizeof(HANDLE), events,TRUE, 5 * 1000);rn if( waitEv != WAIT_TIMEOUT ) rn get_Count = comWin32->GetBuffer((char *)get_Buffer,100);rn if (i==0)rn Form1->tempBuf = (String)get_Buffer;rn i++;rn if ( get_Count == 0 ) rn continue ; //if no data in buffer,then begin next looprn //for ( i=0 ; i< get_Count ; i++ ) rn //Form1->Memo1->Text += (AnsiString)get_Buffer[i];rn //rn Form1->tempLen += get_Count;rn rn else if (Form1->receiveFromComm) rn if (Form1->Buf->EOS) rn Form1->Buf->reWind(1);rn ret = Form1->Buf->Write(Form1->tempBuf.c_str(),Form1->tempLen);rn //ShowMessage(ret);rn Form1->Buf->EOS=false;rn Form1->Memo1->Text=(AnsiString)(Form1->tempBuf);rn i=0;rn Form1->receiveFromComm = false;rn comWin32->Flush(FLUSH_ALL);rnrn rn rn //ShowMessage(Form1->tempLen);rn //ShowMessage((AnsiString)(char *)Form1->tempBuf);rn comWin32->SetEventMask(EV_RXCHAR);rn
两个线程运行++a
题目:个线程并发执行以下代码,假设a是全局变量,初始值是1,那么以下输出中()是可能的。void foo ( ) { ++a printf("%d",a); } A. 3_2_ B. 2_3_ C. 3_3_ D. 2_2_ 答案:ABCD解析:++不能认为是原子操作,a是全局变量,在内存中,则++a一般被分为从内存取a到寄存器、+、回写到内存三步,考虑到并发。 设
如何终止运行中的线程?
我用CWinThread* mythread=AfxBeginThread(threadfun,(void*)this);开始一个线程。怎样强行终止它?rn我这样:rnDWORD dw;rnGetExitCodeThread(mythread,&dw);rnTerminateThread(mythread,dw);rnCloseHandle(mythread);rn却不行!
线程1.2(两个线程同时运行的)
/**  * 2018.8.30  * 作者:小孟鱼  * 功能:两个线程同时运行的  */ package com.xianchen1; public class Xianchen3 {             public static void main(String[] args) {                 Pig pig=new Pig(10);               ...
一个线程如何去控制另一个线程
有一个线程已经启动,并且是顺序执行代码,代码也就只会执行一次,现在我想在外部发送一个请求,暂停那个已经开始执行的线程,或者取消已经运行的线程,如何做啊?各位大神,帮帮忙啊,用的语言是JAVA,希望不是简单的说什么用wait和notify,我用了wait,抛出illegalmonitorstateexception异常,就算我用suspend都挂起不了,有谁做过这样的例子吗。这种方式是基于web形式的
线程——终止线程
终止线程(stop)线程中不推荐使用Thread.stop(),它会释放所有monitor。可能会导致数据不一致性。 例如:   当我们记录多条数据的时候:      数据1: Id=0,Name= Nliki;     数据2: Id=1,Name= Nliki_1;     数据3: Id=2,Name= Nliki_2;     ……当我们写入或者读取数据的时候,为了防止数据被多个线程修改,...
线程(3) - 线程的终止
你比其他Java程序员更优秀的原因,是你学习了这篇课程!nn本篇涵盖了Java的主要语法和核心概念:n(1)异常,抽象类,接口等语法概念 n(2)装箱拆箱,反射,线程、同步与通知,等Java里的基本机制n(3)Java文档及API的用法,命令行、jar文件的使用方法n(4)Eclipse的常用操作n(5)中文编码,文件读写,时间处理等技术nJava学习指南的后续篇章以此篇为基础展开讲解。
运行线程
UI线程是启动线程运行正常的Java代码。 VR线程是由UI线程产生的并初始化,定时更新帧,绘制眼缓冲。所有的应用界面接口函数在VR线程中调用。你应该把任何重要的模拟代码放进另一个线程,所以这是主要的绘制代码和简单的帧工作。现在这个线程能被设置为实时SCHED_FIFO模式来获取更多确定性调度,但是在这个线程上花费的时间是可以有限制的。 不重要的应用应用建立附加线程--例如,音乐播放应用运行解
Java 线程运行图片
Java 线程运行图片更多线程资料:请查询https://www.cnblogs.com/GarfieldEr007/p/5746362.html
运行java线程后会有多少个线程
from:http://www.tianshouzhi.com/api/tutorials/mutithread/239  Java Code  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public class ThreadTest {
Win32线程——在某个线程内终止另一个正在运行的线程(2)(Event对象)
《Win32多线程程序设计》 Win32 中最具弹性的同步机制就属 events 对象了。 Event 对象是一种核心对象,它的唯一目的就是成为激发状态或未激发状态。这两种状态全由程序来控制,不会成为Wait…() 函数的副作用。 Event 对象之所以有大用途,正是因为它们的状态完全在你掌控之下。Mutexes 和 sem aphores 就不一样了,它们的状态会因为诸如WaitForS
Win32线程——在某个线程内终止另一个正在运行的线程(1)
《Win32多线程程序设计》–Jim Beveridge & Robert Wiener 对于多线程程序,如果用户企图结束程序(主线程)时,子线程尚未完成工作,怎么办? 结束一个线程,听起来好容易,但是结束程序必须按次序进行,以避免发生 race conditions。让程序依次序进行是非常重要的,特别是在程序要结束之前。结束一个程序就好像拆除一栋建筑物一样,在你以推土机轧平它之前,你
独立线程,独立存放区域和独立的socket进行通信,却发现当A线程运行,影响B线程,为什么?
我有两个独立的线程,每个线程有独立的内存存放其获取或要发送的数据,rn两个独立的socket负责各自的通信.A线程用于Timer触发的不断的查询状态,rnB状态用于别的通信,发现A线程的运行会影响B.rn不明白:而这没有任何的关联为什么会相互影响呢?rn如何处理?rnrn谢谢!
同一线程如何自动启动,运行,终止.....再启动,运行,终止.......
各位高手:rnrnA.同一线程如何自动启动,运行,终止.....再自动启动,运行,终止.......如此不断循环rnrnB.另外,线程如何完全终止?下例中不能终止线程:rnrnOption ExplicitrnDim hThread As LongrnPrivate Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As LongrnPrivate Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As LongrnPrivate Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongrnPrivate Declare Function SetThreadPriority Lib "kernel32" (ByVal hThread As Long, ByVal nPriority As Long) As LongrnPrivate Declare Function GetThreadPriority Lib "kernel32" (ByVal hThread As Long) As LongrnPrivate Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As LongrnPrivate Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As LongrnPrivate Declare Function GetTickCount Lib "kernel32" () As LongrnrnPublic Sub AddList()rn Dim i%, lTick%rn For i = 0 To 5000rn List1.AddItem Str(Time)rn lTick = GetTickCountrn Nextrn rn While GetTickCount - lTick < 500rn WendrnrnEnd SubrnrnPrivate Sub Command1_Click()rn rn Dim hID As Longrn hThread = CreateThread(ByVal 0&, ByVal 0&, AddressOf AddList, ByVal 0&, ByVal 0&, hID) rnEnd SubrnrnPrivate Sub Command2_Click()rn TerminateThread hThread, 0rn 或CloseHandle hthreadrnEnd Subrn都无法终止rn
两个线程同时运行案例
/** * 两个案例同时运行案例 * 1:这个两个线程并不是有规律的运行而是有没有规律的交替运行 */package com.test3;public class Demo10_3 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Pig pi
关于两个线程运行的问题!
我声明了一个类,用它定义了两个全局的实例,然后启动了两个线程分别对这两个类实例进行简单的操作,比如在类中进行计数操作,当计数达到一个阈值后,置一个标志位为true后退出线程,程序的主线程一直在做循环,不断地监测着两个全局的类实例中的标志位,当两个标志位都为true,结束运行。代码如下:rnrn[code=C/C++]rnrnclass CMyThreadrnrnpublic:rn CMyThread()rn rn bDone = FALSE;rn ;rn int IsDone() return bDone;;rnrnprivate:rn UINT SampleFunc();rn int bDone;rn;rnrnUINT CMyThread::SampleFunc()rnrn int i = 0;rn while(1)rn rn i ++;rn if(i > 1000000)rn rn bDone = TRUE;rn break;rn rn rn rn return 0;rnrnrnCMyThread pST1, pST2;rnUINT ThreadFunc1()rnrn return pST1.SampleFunc();rnrnrnUINT ThreadFunc2()rnrn return pST2.SampleFunc();rnrnrnvoid MyMainThread()rnrn CWinThread* pThread1; rn CWinThread* pThread2;rnrn pThread1 = AfxBeginThread(ThreadFunc1, NULL);rn pThread2 = AfxBeginThread(ThreadFunc2, NULL);rnrn while(1)rn rn if(pST1.IsAlreadyDone() &&rn pST2.IsAlreadyDone())rn break;rn ;rnrn return;rnrn[/code]rnrn这么个简单的程序,竟然在debug下跑得通,release就没响应了。怪哉,请高人给指点一下,谢谢!
JAVA线程-线程的实现
Java的多线程实现,有一下两种方式: ·继承Thread类 ·实现Runnable接口注意 1直接调用run()是没有创建新线程的(相当于只是调用了一个普通方法) 2new Thread();只是创建了线程对象要启动线程需要调用start(). 3如果当前线程已经启动了(就是说已经调用了start方法),再次调用start方法就会出现java.lang.IllegalThreadSta
Java线程的学习_线程的控制
Java的线程支持提供了一些便捷的工具方法,通过这些便捷的工具方法可以很好地控制线程的执行。join线程Thread提供了让一个线程等待另一个线程完成的方法——join()方法。在某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,知道被join()方法加入的join线程执行完为止。 join()方法通常使用线程的程序调用,以将大问题划分为许多小问题,每个小问题分配一个线程,当所有的
如何终止一个java线程
线程,相比进程更加轻量级,系统开销更小,但过多的线程因系统资源占用多,导致系统性能下降,因此有关线程的管理不得不去做。在java中如何创建线程呢?相比这样的文章都已多如牛毛,笔者在这里只简单的重述一下。常见的有两种方式:1.继承Thread类并重写run方法2.实现Runnable接口,通过 new Thread(runnableImpl)方式第2中方式显得更加的灵活,也是经常被采用的方式,第一种...
求助高手:一个线程中终止另一个线程
我想在一个主线程中终止另一个正在运行线程,应该怎么解决?rn在网上查了很多资料,都说的不清楚,有些说的还是错的。希望高手解答。rn 我使用过GetCurrentThread()获得需要终止运行的线程的句柄,然后在主线程中使用TerminateThread()终止它,结果好像是把主线程终止了(界面没有了)。查msdn ,它说需要使用DuplicateHandle。有没有什么好的方法?还是我使用TerminateThread的方法不对?rn谢谢高手指点!
Java(线程的终止)
中断线程的执行public class InterruptTest extends Thread{ static int result=0; public InterruptTest(String name) { super(name); } public static void main(String[] args) { Sy
JAVA多线程基础《线程终止》
interrupt终止线程运行 1.线程类interrrupt()解读 interrupt的作用是中断本线程,本线程中断自己是被允许的,如果是其他线程调用本线程的inteerupt方法也是被允许的,但调用之前会调用checkAccess检查权限,这有可能抛出SecurityException异常,但被jdk内部捕获处理并返回false无权限调用本线程的interrupt方法,如果本线程是处于阻塞状...
Java线程的终止和同步
线程:是程序内部的顺序控制流。 Java线程:通过java.lang.Thread类来实现。 一、实现线程方法: 1、新建一个Thread对象 2、新建一个Thread类的子类对象 3、新建一个实现Runnable接口的对象 二、Java VM的主线程:VM启动一个主线程(由public static void main(String[] args){}定义)。 多线程:在操作系统中...
Java终止线程问题
在主线程中启动了一个子线程rnrn先已知子线程被阻塞,是因为url连接建立,阻塞在读取数据方面,因此通过标识符判断使子线程自动结束的方法无法使用了rnrn先就请教,如何在主线程中直接kill掉这个子线程了rnrn使用了rnt.stop()//t为子线程引用rn或者rn try rn t.sleep(300);rn catch (InterruptedException x) rn t.interrupt();//中断线程rn rn2个方法均无法直接kill掉线程t,因为在执行方法之前之后,执行t.isAlive()均为truernrn不知道现在有没有其他别的方法能够使用了rn
Java线程终止状态
Java线程通过启动run执行线程内容。run执行过程,可能是正常结束,也可能是抛出异常。 通常检测线程的执行状态通过 循环检测Thread.isAlive()来判断线程的执行状态。。。可通过getState=TERMINATE判断线程结束。但无法区分正常还异常终止。 1.通过线程池管理线程 2.callable.返回退出状态 3.UncaughtExceptionHandler
java 线程终止
package study_02; /*终止线程 *1 线程正常执行完毕--&gt;次数 *2 外部干涉---&gt;加入标识 *不要使用 destroy和stop */ public class ThreadStop implements Runnable { private boolean flag = true; private String name; public T...
Java正确地终止线程
首先要明确的是Java没有提供任何机制来安全的终止线程。 Java虽然提供了stop方法来终止线程,但是这种方式简单粗暴,很可能造成数据不一致的情况,因此stop方法已经弃用了。 目前较为安全地终止线程方式有两种: 1)使用标志位,让线程run方法在合适的时候结束执行,从而终止线程。 2)使用中断机制,让线程run方法在中断的状态下结束执行,从而终止线程。 ps:这两种方案虽然都可以安全...
如何终止线程池里的线程?
当我把t.title(StartPage, EndPages)委托给线程池管理后,因为运行时间比较长,如何强终止它?rnrnpublic void mainrnrnBeiJingGuoAn t = new BeiJingGuoAn();rnThreadPool.QueueUserWorkItem(delegate t.title(StartPage, EndPages); );rnrnrnrnpublic class BeiJingGuoAn rnrn public void title(string StartPage, string EndPages)rn rn //相关逻辑rn rn
在线程外面终止线程的问题
UINT COPration ::Mythread(LPVOID pParam)//COPration 是纯虚基类rnrn COPration *P = (COPration *)pParam;rn while(true)rn rn if(p->m_Com.GetBufferCount>0)rn return 0;rn rnrnbool COldmeter::Read()//COldmeter是从COPration派生来的 rnrn .rn .rnCWinThread *pThread = AfxBeginThread(Mythread,this);rn .rn .rn if(pThread->m_hThread != NULL)rn rn DWORD ExitCode;rn GetExitCodeThread(pThread->m_hThread,&ExitCode);rn ExitThread(ExitCode);rn rn .rn .rnrn上述部分是在动态库里面实现。主应用程序通过接口类调用动态库里面的函数。rn问题是,但我在调用ExitThread(ExitCode);结束线程的时候,我的主应用程序界面竟然消失了,结果在任务管理器里面发现主应用程序却还在执行。rn 这是怎么回事啊,我只是想结束本线程而已,不知道我的处理有问题没有。大家有什么解决办法没有????
java入门--- 线程操作实例之终止线程
    Java中原来在Thread中提供了stop()方法来终止线程,但这个方法是不安全的,所以一般不建议使用。我们来看使用interrupt方法中断线。使用interrupt方法来终端线程可分为两种情况:(1)线程处于阻塞状态,如使用了sleep方法。 (2)使用while(!isInterrupted()){……}来判断线程是否被中断。    在第一种情况下使用interrupt方法,sle...
终止线程
Thread类中有封装stop()方法终止线程,在程序中,使用了停用的方法并不意味着程序不会被执行,它仍然起作用。由于缺点不过,不提长使用而已。 看一下终止线程的示例: [code=&quot;java&quot;]package com.mz.xx.tb; public class Deprecation2 extends Thread{ boolean runnable = t...
线程终止??
写了个简单的登陆页面,响应登陆按钮事件如下实现rnrnprivate void ImageButton1_Click(object sender, System.Web.UI.ImageClickEventArgs e)rnrn //登陆验证rn tryrn rn rn string orgid;rn orgid=DeptInfo.SelectedValue;rn string pwd;rn pwd=PassWord.Text.ToString().Trim();rn string sqlstr="select * from organinfo where id="+Int32.Parse(orgid)+" and pwd='"+pwd+"'";rn DataSet ds=new cwb.DBOperat().getRsBySql(sqlstr);rn if(ds.Tables[0].Rows.Count>0)rn rn //写入Session对象rn Session["username"]=DeptInfo.SelectedItem.Text.ToString();rn Response.Redirect("DoLogin.aspx");rn rn elsern rn Message.Text="密码不正确!";rn rn rn rn catch(Exception ee)rn rn Response.Redirect("frmError.aspx?sel="+Server.UrlEncode(ee.Message.ToString())+"&des="+Server.UrlEncode(ee.Source.ToString()));rn rn rnrn rnrnrn但出现错误,错误提示rnMessage.toString()为mscorlib ee.Source.toString()为线程被终止,请问是什么问题,如何解决!rn
终止线程?
我在启动线程时使用了tcpclient,我想强行关闭这个程序,但是线程怎么也关闭不了。怎么办啊?
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数