以下为线程 阻塞/唤醒  主要代码

public class MyThread extends Thread {

        //无意义
private final Object lock = new Object(); //标志线程阻塞情况
private boolean pause = false; /**
* 设置线程是否阻塞
*/
public void pauseThread() {
this.pause = true;
} /**
* 调用该方法实现恢复线程的运行
*/
public void resumeThread() {
this.pause = false;
synchronized (lock) {
//唤醒线程
lock.notify();
}
} /**
* 这个方法只能在run 方法中实现,不然会阻塞主线程,导致页面无响应
*/
void onPause() {
synchronized (lock) {
try {
//线程 等待/阻塞
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} @Override
public void run() {
super.run();
//标志线程开启
isWait = true;
//一直循环
while (true) {
if (pause) {
//线程 阻塞/等待
onPause();
}
try {
          //程序每50毫秒执行一次 值可更改
Thread.sleep(50);  
//这里写你的代码 你的代码 你的代码 重要的事情说三遍
} catch (Exception e) {
e.printStackTrace();
break;
}
}
}
}

如何使用?

// 1.创建自己的线程
MyThread myThread = new MyThread(); // 2.在合适的地方启动线程(你需要在什么地方启动它)
myThread.start(); // 3.启动后线程的 阻塞/暂停
myThread.pauseThread(); // 4.以及 阻塞/暂停 线程后的 唤醒/继续
myThread.resumeThread();

如何实现Java线程的 阻塞/唤醒(和暂停/继续 类似)的更多相关文章

  1. java - 线程等待与唤醒

    Java多线程系列--“基础篇”05之 线程等待与唤醒 概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. w ...

  2. Java线程的阻塞

    线程的阻塞 线程的优先级 线程总是存在优先级,优先级范围在1~10之间,线程默认优先级是5(数值越大优先级越高): JVM线程调度程序是基于优先级的抢先调度机制: 在大多数情况下,当前运行的线程优先级 ...

  3. Java线程等待与唤醒

    class ThreadA extends Thread{ public ThreadA(String name) { super(name); } public void run() { synch ...

  4. 多线程之Java线程阻塞与唤醒

    线程的阻塞和唤醒在多线程并发过程中是一个关键点,当线程数量达到很大的数量级时,并发可能带来很多隐蔽的问题.如何正确暂停一个线程,暂停后又如何在一个要求的时间点恢复,这些都需要仔细考虑的细节.在Java ...

  5. Java 中你怎样唤醒一个阻塞的线程?

    在 Java 发展史上曾经使用 suspend().resume()方法对于线程进行阻塞唤醒,但 随之出现很多问题,比较典型的还是死锁问题. 解决方案可以使用以对象为目标的阻塞,即利用 Object ...

  6. java并发之阻塞队列

    在前面我们接触的队列都是非阻塞队列,比如PriorityQueue.LinkedList(LinkedList是双向链表,它实现了Dequeue接口). 阻塞队列与普通队列的区别在于:当队列是空的时, ...

  7. java线程深入学习

    一.java中的线程是通过Thread类创建的, //下面是构造函数,一个共同的特点就是:都是调用init()进行创建的 public Thread() { init(null, null, &quo ...

  8. Java多线程_阻塞队列

    1.什么是阻塞队列       我们知道,PriorityQueue.LinkedList这些都是非阻塞队列.在我们使用非阻塞队列的时候有一个很大问题,它不会对当前线程产生阻塞,那么在面对类似消费者- ...

  9. java并发编程阻塞队列

    在前面我们接触的队列都是非阻塞队列,比如PriorityQueue.LinkedList(LinkedList是双向链表,它实现了Dequeue接口). 使用非阻塞队列的时候有一个很大问题就是:它不会 ...

随机推荐

  1. Cookie相关工具方法

    /** * InputStream转化为byte[]数组 * @param input * @return * @throws IOException */ public static byte[] ...

  2. https://stackblitz.com/github/cwiki-us-angular/cwiki-us-angular-app 导入后如何添加到自己的项目

    将 https://stackblitz.com/github/cwiki-us-angular/cwiki-us-angular-app 导入到界面后,如何将这个项目添加到自己的项目里面. 然后再自 ...

  3. 5.JavaBean

    JavaBean JSP开发初期HTML,css,java代码混杂在一起,给程序的调试和维护带来很大困难.将与HTML分离并将对象和逻辑java代码封装成类就是一个JavaBean组件. 1.Java ...

  4. pycharm2018.3 x64激活

    今天把pycharm从2018.2.4更新到了2018.3.7,需要重新激活,激活方式如下: 1.修改hosts文件,将下面两句话添加到hosts文件,保存 0.0.0.0 account.jetbr ...

  5. 实现shape图层添加label

    void CmapwingisTest2View::OnToolsAdd32780() { TCHAR szFilters[]= _T("SHP Files (*.shp)|*.shp||& ...

  6. oracle存储过程及sql优化-(三)

    接下来介绍上篇接触到的存储过程中的sql语句 insert into TMP_GT3_sbfgl_WJSTJB SELECT NSR.NSRSBH, NSR.NSRMC, NSR.SCJYDZ, ca ...

  7. 套接字之 getsockname && getpeername

    getsockname-获取本地地址:比如,在绑定的时候设置端口号为0由系统自动选择端口绑定,或者使用了INADDR_ANY通配所有地址的情况下,后面需要用到具体的地址和端口,就可以用getsockn ...

  8. 1.3 Junit4简介

    1.Junit4框架 可用于单元测试,直接测试类中的方法 2.简单实用 a.导入Junit的jar包 b.熟悉Junit的执行顺序 c.写测试用例 d.利用断言,找bug 3.demo public ...

  9. unity3d卡在loading的解决方法

    解决方案: 关闭U3D,打开电脑的网络适配器把网给掐掉,打开U3D后会提示Workoffline 点击这个即可,然后再把网给起起来就可以了

  10. Nova rebuild for boot from volume issue

    目录 文章目录 目录 Nova boot from volume Rebuild Instance Rebuild for boot from volume Nova boot from volume ...