在线程中往往需要做一些阻塞,但是如果每次都是写一个循环,那不就很冗余,可以把睡眠的代码分离出来,如果停止睡眠就把sleep设置为false。
这样的设置其实是为了减少调用Thread.sleep的延误,比如说,你是Thread.sleep(30000),那么你在这30000毫秒的时间内,你是做不了事情的,但是如果你是new了MySleep的类,你就可以控制在这30000的时间内何时跳出睡眠。你可以把时间单位调低一点,就可以更加精准了。
public class MySleep { private long sleepTime = 0;//要阻塞的时间 private long format = 100;//阻塞时间的单位,如果对具体时间没有精确的要求,可以将它设置到1000 private boolean sleep = true; public MySleep(){}; public MySleep(long t){ sleepTime = t; } public void setSleepTime(long t){ sleepTime = t; } public void setSleepTime(long t,long f){ sleepTime = t; format = f; } public boolean isSleep() { return sleep; } public void setSleep(boolean sleep) { this.sleep = sleep; } public void start(){ System.out.println("****** 阻塞开始 *****"); while(sleep){ if(sleepTime > 0){ try { Thread.sleep(format); } catch (InterruptedException e) { e.printStackTrace(); } sleepTime -= format; }else{ sleep = false; } } System.out.println("***** 阻塞完成 ******"); System.out.println("睡眠时间还有" + sleepTime); } }
public class TT { private static myRunnable r1 = new myRunnable(3000); private static myRunnable r2 = new myRunnable(10000); private static myRunnable r3 = new myRunnable(5100); public static void main(String[] args) { Thread t1 = new Thread(r1); t1.start(); Thread t2 = new Thread(r2); t2.start(); Thread t3 = new Thread(r3); t3.start(); Thread stopThread = new Thread(new Runnable() { @Override public void run() { new MySleep(4000).start(); r1.setSleep(false); r2.setSleep(false); r3.setSleep(false); } }); stopThread.start(); } } class myRunnable implements Runnable{ MySleep mySleep; public myRunnable(int sleepTime){ mySleep = new MySleep(); mySleep.setSleepTime(sleepTime, 100); } @Override public void run() { System.err.println(DateUtil.getNewDate(DateUtil.HMS1)); mySleep.start(); System.err.println(DateUtil.getNewDate(DateUtil.HMS1)); } public void setSleep(boolean sleep){ mySleep.setSleep(sleep); } }
相关推荐
后玩委托、 线程和异步调用的这么久,这是一种罪恶不分享我的智慧和知识对这个问题的一些因此希望,你 won�t 找一个 MSDN 文章在 1 AM 不知道为什么在你决定去到计算机。 我会尝试使用婴儿步骤和大量的 examples�...
C++封装类CWSocket(多线程 非阻塞)vc mfc 一般直接添加就可用,还有超时处理,强大。
vc++6.0 编写socket多线程例程,非阻塞模式,客户端 服务器端源代码,可运行
支持多线程的阻塞队列,使用模板技术,可存储任意类型数据
winsock多线程阻塞网络通信源码,经典实验
java 多线程 同步阻塞 唤醒
在服务端应用程序的主线程中不停的调用accept操作,以使服务端程序能不停地接受客户端程序发送...详见链接:Winsocket 二:多线程阻塞服务器程序(tcp),http://blog.csdn.net/u013071074/article/details/26340707
用户线程的优点是线程的调度不需要内核直接参与,控制简单,可以在不支持线程的操作系统中实现,缺点是同一进程中只能同时有一个线程在运行,如果一个线程使用了系统调用而阻塞,那么整个进程都会被挂起。...
实时接收发送消息(接收消息线程阻塞,发送消息线程唤醒),
《MFC多线程的创建,包括工作线程和用户界面线程》全面讲解MFC多线程的创建,界面多线程与工作者多线程,多线程的起源、继承与派生,两多线程之间的区别与相同点,定时器与多线程的关系与异同(定时器是定时优先抢占...
我们经常会进行一些比较复杂的计算和算法实现,或者是在某些特定的情况下会实例化一些类。...可以通过开启子线程,将复杂计算内容交给子线程来处理,主线程主要进行UI的渲染操作,这样同样能够解决线程阻塞的问题。
NULL 博文链接:https://1358440610-qq-com.iteye.com/blog/2114621
单线程阻塞server&client程序(tcp),学习tcp的简单实例。博客链接:http://blog.csdn.net/u013071074/article/details/26293303
最普通的Socket多线程阻塞通信模型
socket服务端:采用多进程通信的方法(两个进程,主进程接收socket数据,子进程负责读取缓冲的数据,增大并发性能,接收采用多线程的形式) socket客户端:测试发送数据。
Linux下多线程的阻塞模式下的socket编程,简单实用,可以重用。
010_android 之UI线程阻塞及其优化视频教材,讲解的比较详细,有兴趣的可以学习下哦。
* 阻塞态中,线程结构体需要添加一个成员变量ticks_blocked,以记录线程被阻塞的时间。 * 通过操作系统自身的时钟中断,每次检测将ticks_blocked 减 1,如果减到 0 就唤醒线程。 四、blocked_thread_check 函数 * ...
详细的讲述了多线程的各种用法 Java线程:概念与原理 ...Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器 Java线程:大总结
QT QSerialPort 封装,阻塞方式发送数据后等待读取缓冲区数据结果,使用QT信号量阻塞,线程中初始化串口和读取数据。