Java关闭线程的安全方法】的更多相关文章

Java之前有一个api方法可以直接关闭线程,stop(),由于这个方法是强制性地关闭线程,有的时候会发生错误,之后就取消了,现在可用的方法主要有两种: 1.  在线程中加入一个成员变量,当一个flag使用.在线程run()方法中轮流去检查这个变量,变量变化时就退出这个线程.代码示例如下: public class StopThread extends Thread {     private boolean _run = true;     public void stopThread(boo…
同步的方法: 一.同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法.在调用该方法前,需要获得内置锁,否则就处于阻塞状态. 注: synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类. 二.同步代码块 即有synchronized关键字修饰的语句块. 被该关键字修饰的语句块会自动被加上内置锁,从而实现同步     代码如:  synchronized(object){…
同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法.在调用该方法前,需要获得内置锁,否则就处于阻塞状态. 注: synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类. 二.同步代码块 即有synchronized关键字修饰的语句块. 被该关键字修饰的语句块会自动被加上内置锁,从而实现同步     代码如:  synchronized(object){ }    注:同步…
/** * 线程通信的例子:使用两个线程打印 1-100.线程1, 线程2 交替打印 * * 涉及到的三个方法: * wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器. * notify():一旦执行此方法,就会唤醒被wait的一个线程.如果有多个线程被wait,就唤醒优先级高的那个. * notifyAll():一旦执行此方法,就会唤醒所有被wait的线程. * * 说明: * 1.wait(),notify(),notifyAll()三个方法必须使用在同步代码块或同步方…
Executors创建四种线程池: CachedThreadPool:可缓存的线程池,该线程池中没有核心线程,非核心线程的数量为Integer.max_value,当有需要时创建线程来执行任务,没有需要时回收线程,适用于耗时少,任务量大的情况. ScheduledThreadPool:周期性执行任务的线程池,按照某种特定的计划执行线程中的任务,有核心线程,但也有非核心线程,非核心线程的大小也为无限大.适用于执行周期性的任务. SingleThreadPool:只有一条线程来执行任务,适用于有顺序…
最近测试环境上测试的项目通过shutdown.sh始终无法彻底关闭. 之前临时解决方法两种: 第一:通过ps -ef|grep tomcat查看到tomcat的进程直接使用kill来杀死进程. 第二: 基本原理为启动tomcat时记录启动tomcat的进程id(pid),关闭时强制杀死该进程 1.找到tomcat下bin/catalina.sh文件,vi进去添加点东西,主要是记录tomcat的pid,如下: 大概在第125行左右,添加如下代码 #设置CATALINA_PID(后加)if [ -z…
线程启动完毕后,在运行可能需要终止,Java提供的终止方法只有一个stop,但是不建议使用此方法,因为它有以下三个问题: (1)stop方法是过时的 从Java编码规则来说,已经过时的方式不建议采用. (2)stop方法会导致代码逻辑不完整 stop方法是一种"恶意" 的中断,一旦执行stop方法,即终止当前正在运行的线程,不管线程逻辑是否完整,这是非常危险的. 看如下代码: public class Client { public static void main(String[]…
背景:面试过程中问到结束线程的方法和线程池shutdown shutdownnow区别以及底层的实现,当时答的并不好. Java结束线程的三种方法 线程属于一次性消耗品,在执行完run()方法之后线程便会正常结束了,线程结束后便会销毁,不能再次start,只能重新建立新的线程对象,但有时run()方法是永远不会结束的.例如在程序中使用线程进行Socket监听请求,或是其他的需要循环处理的任务.在这种情况下,一般是将这些任务放在一个循环中,如while循环.当需要结束线程时,如何退出线程呢? 有三…
线程属于一次性消耗品,在执行完run()方法之后线程便会正常结束了,线程结束后便会销毁,不能再次start,只能重新建立新的线程对象,但有时run()方法是永远不会结束的.例如在程序中使用线程进行Socket监听请求,或是其他的需要循环处理的任务.在这种情况下,一般是将这些任务放在一个循环中,如while循环.当需要结束线程时,如何退出线程呢? 有三种方法可以结束线程: 1.设置退出标志,使线程正常退出,也就是当run()方法完成后线程终止,比如使用一个volatile 的变量: 2.使用int…
线程属于一次性消耗品,在执行完run()方法之后线程便会正常结束了,线程结束后便会销毁,不能再次start,只能重新建立新的线程对象,但有时run()方法是永远不会结束的.例如在程序中使用线程进行Socket监听请求,或是其他的需要循环处理的任务.在这种情况下,一般是将这些任务放在一个循环中,如while循环.当需要结束线程时,如何退出线程呢? 有三种方法可以结束线程: 1.设置退出标志,使线程正常退出,也就是当run()方法完成后线程终止 2.使用interrupt()方法中断线程 3.使用s…