-
广为流传的错误停止线程的方法:interrupt() interrupt()--初衷并不是用于停止线程 在调用sleep()或者join()的时候,一旦其他线程调用interrupt(),它将会收到一个异常,这些被阻塞的线程因为某些原因需要被唤醒,比如外部发生了中断而需要响应,这时就采用抛出异常的方式来使其作出响应。总而言之,interrupt()方法并不能正确地停止进程 一个线程在阻塞状态下(例如sleep),此时interrupt的话,将会产生两个结果: 1、进程的interrupt状态被清除(cleard)而非被设置(set)。 2、sleep方法会抛出异常。查看全部
-
的我非常查看全部
-
斥的实现:synchronized(lockObj);java的语法保证的同一时间,只有一个线程获得lockObj 同步:wait(),notify(),notifyall(),都是属于object类,并不是thread类 notify()唤醒wait set中的一条线程,而notifyall()唤醒所有线程 同步是两个线程之间的一种交互的操作(一个线程发出消息另外一个线程响应)。查看全部
-
广为流传的错误停止线程的方法:interrupt() interrupt()--初衷并不是用于停止线程 在调用sleep()或者join()的时候,一旦其他线程调用interrupt(),它将会收到一个异常,这些被阻塞的线程因为某些原因需要被唤醒,比如外部发生了中断而需要响应,这时就采用抛出异常的方式来使其作出响应。总而言之,interrupt()方法并不能正确地停止进程查看全部
-
线程初体验:Thread类,,与run()方法查看全部
-
在线程中,停止线程的方法:设置旗标 使用volatile 定义boolean running=true,通过设置标志变量running,来结束线程。 如本文:volatile boolean keepRunning=true; 这样做的好处是:使得线程有机会使得一个完整的业务步骤被完整地执行,在执行完业务步骤后有充分的时间去做代码的清理工作,使得线程代码在实际中更安全查看全部
-
Java中如何停止线程————使用退出标志查看全部
-
Java5并发编程工具查看全部
-
多线程编程常用的交互模型查看全部
-
线程安全性查看全部
-
如何扩展Java查看全部
-
如何扩展Java并发的知识查看全部
-
扩展建议: Java Memory Mode JMM描述了java线程如何通过内存进行交互 happens-before synchronized,volatile & final Lock 和 Condition对象 java锁机制和等待条件的高层实现 java.util.concurrent.locks 线程的安全性: 原子性和可见性 java.util.concurrent.atomic synchronized & volatile DeadLocks 多线程常用的交互模型: Producer-Consumer模型 Read-Write Lock模型 Future模型 Worker Thread 模型 java5引入的并发编程工具: java.util.concurrent 线程池ExecutorService Callable & Future BlockingQueue查看全部
-
interrupt()方法可以使中断方法发生变化查看全部
-
如何正确停止线程 一、错误一:stop()方法 1、not stop:stop()方法会使线程戛然而止 2、使程序突然中止,无法完成完整的业务步骤,也无法进行清理工作 二、错误二:interrupt()方法 1、interrupt()方法只能设置interrupt标志位(且在线程阻塞情况下,标志位会被清除,更无法设置中断标志位),无法停止线程 三、正确方法:设置退出标志 1、使用退出标志位来停止while循环 2、完成最后一次业务后跳出while循环后,之后进行一些清理工作 在异常抛出之前,线程刚好执行了Thread.sleep(1000); 然后在主线程main中就是休眠的这一秒中继续执行了thread.interrupt(); 因为thread是在休眠之中的,所以在 try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } 中抛出了异常,也就是说这时候的因为sleep中采用的interrupt()中断方法已经被处理了,就是理解为回归正常, 所以以后的isInterrupt()方法判断的都是没有中断的了,就是返回false。因为它再次循环就是在执行了异常之后,所以此时isInterrupt()都返回false interrupt()方法初衷并不是用来停止线程(静态方法,返回布尔值)查看全部
举报
0/150
提交
取消