- 浏览: 1760073 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (528)
- java基础 (35)
- oracle (23)
- 项目管理 (10)
- 代码架构 (27)
- java线程与进程 (2)
- 盈利模式 (10)
- 性能测试 (1)
- Ophone (2)
- web (6)
- asp (0)
- php (1)
- c# (1)
- Ruby (0)
- jboss (4)
- java基础之面试篇 (7)
- 数据查询优化 (1)
- weblogic (3)
- EJB (1)
- EXT (6)
- jquery (8)
- struts2 (2)
- struts1 (1)
- css (1)
- javascript (4)
- SSI (9)
- linux (9)
- c++ (6)
- 网络安全 (3)
- swing (2)
- 嵌入式 (1)
- 图像处理(机器人智能技术) (1)
- vb (2)
- mysql (2)
- sqlserver (10)
- dephi (0)
- Android (4)
- hadoop (1)
- maven (4)
- mybatis (1)
- html5 (1)
- 算法 (0)
- 高并发架构总结 (1)
- 时事评论 (4)
- 有些话不能不说 (35)
- 琴棋书画 (0)
- 教育 (1)
- 创业需要的 (4)
- 产品经理需要的 (4)
- 小南那些青涩的文章 (9)
- 如何创新 (4)
- 历史借鉴之秦汉 (1)
- 历史借鉴之三国 (1)
- 历史借鉴之魏晋 (1)
- 历史借鉴之隋唐 (1)
- 历史借鉴之南北宋 (1)
- 历史借鉴之近现代史 (1)
- 好工具我来推荐 (4)
- 汇编 (14)
最新评论
-
bilimeng:
求教,ConcurrentHashMap不是线程安全的么,为啥 ...
架构师之jdk8-----------------ConcurrentHashMap快速构建本地缓存和单例模式 -
baiducctv5:
wtaisi 写道wtaisi 写道|||||||||
spring aop中的propagation的7种配置的意思 -
zhangdong92:
另外内存泄漏一般也不是指计算时溢出。而是指某些对象已经不再使用 ...
java基础之面试篇三---int,float,long,double取值范围,内存泄露 -
zhangdong92:
Long.MAX_VALUE应该是(2^63)-1,而不是64 ...
java基础之面试篇三---int,float,long,double取值范围,内存泄露 -
nannan408:
java-lxm 写道好湿好湿好湿谢谢: )。
游南巅之晚秋
多线程的利用在进行进程调度中具有重要的意义,是java的一个比较有意义的功能,它实现了时间和空间上的合理分配。以下例子实现了两个线程的随时单独暂停和继续,多个线程只要往上加就可以了,代码如下:
public class TestThread implements Runnable {
public int state1 = 0;
public int state = 0;
public String name;
public TestThread(String name) {
// new Thread(this).start();
this.name = name;
}
@Override
public void run() {
// state为2时,进入等待,等到state1=1时的唤醒后继续
synchronized (this) {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (2 == state) {
System.out.println(this.state);
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(this.name + " Run--------------->");
}
}
}
public void wakeUpThisThread() {
synchronized (this) {
if (1 == this.state1) {
this.notify();
}
}
}
public static void main(String[] args) {
//启动两个线程做对比
TestThread tt1 = new TestThread("Thread1");
Thread t1 = new Thread(tt1);
t1.start();
// 第二段
TestThread tt2 = new TestThread("Thread2");
Thread t2 = new Thread(tt2);
t2.start();
//5秒钟后看线程暂停
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
tt1.state = 2;
tt2.state = 2;
//8秒后只恢复线程1,23秒后恢复线程2,可见notify并不是针对所有的,是可以单独针对某线程的
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("激活");
tt1.state1 = 1;
tt1.state = 0;
tt1.wakeUpThisThread();
tt2.state1 = 1;
tt2.state = 0;
// tt2.wakeUpThisThread();
int count=0;
while (true) {
count++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(15==count){
tt2.wakeUpThisThread();
}
}
}
}
public class TestThread implements Runnable {
public int state1 = 0;
public int state = 0;
public String name;
public TestThread(String name) {
// new Thread(this).start();
this.name = name;
}
@Override
public void run() {
// state为2时,进入等待,等到state1=1时的唤醒后继续
synchronized (this) {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (2 == state) {
System.out.println(this.state);
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(this.name + " Run--------------->");
}
}
}
public void wakeUpThisThread() {
synchronized (this) {
if (1 == this.state1) {
this.notify();
}
}
}
public static void main(String[] args) {
//启动两个线程做对比
TestThread tt1 = new TestThread("Thread1");
Thread t1 = new Thread(tt1);
t1.start();
// 第二段
TestThread tt2 = new TestThread("Thread2");
Thread t2 = new Thread(tt2);
t2.start();
//5秒钟后看线程暂停
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
tt1.state = 2;
tt2.state = 2;
//8秒后只恢复线程1,23秒后恢复线程2,可见notify并不是针对所有的,是可以单独针对某线程的
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("激活");
tt1.state1 = 1;
tt1.state = 0;
tt1.wakeUpThisThread();
tt2.state1 = 1;
tt2.state = 0;
// tt2.wakeUpThisThread();
int count=0;
while (true) {
count++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(15==count){
tt2.wakeUpThisThread();
}
}
}
}
发表评论
-
java 序列化和反序列化(针对字符串的例子)
2014-11-04 14:09 42321.前言. 摘自:http://blog.csdn.ne ... -
java的addall和system.arraycopy的效率对比
2014-07-11 18:22 14031.前言。 如题。 2.对比。 addall ... -
java时间转换总结
2014-07-01 09:35 27921.如题。 后续将时间问题都放本篇。 2.java时间处理 ... -
System.arraycopy把多个byte数组合并为一个byte数组,节省空间。
2014-05-22 14:34 53261.前言。 如题。 2.代码。 publi ... -
jdk5后并发线程优雅的创建方式ExecutorService+Callable比thread和runable两种方式简单和实用,可以替代后两者。
2014-01-23 16:48 22591.前言。 如题。ExecutorService可用在并 ... -
eclipse指定jvm路径,在没有配置jvm环境变量的时候可直接打开。
2014-01-10 15:37 23621.前言。 如题。 2.代码。 这个写在eclipse.i ... -
java如何最小值int变成最大值?可作为字符串排序使用
2013-11-30 00:29 22341.前言。 如题。 2.例子,可以直接运行。 p ... -
Myeclipse copy的工程无法发布的问题-Exploded location overlaps an existing deployment
2013-06-09 09:16 11091.前言。 直接copy,直接在Myeclipse下面 ... -
Comparator和Comparable在排序中的应用
2012-11-06 10:53 937Comparator可以实现数组排序,与原类没有很大耦合。 ... -
Myeclipse6.5不能启动和运行缓慢、运行错误的一些问题总结
2012-03-15 11:32 2129Myeclipse6.5对1.6支持部好,最好把ec ... -
java用Ant.jar的zip写文件解决文件名中文问题(转)
2012-01-09 13:51 2279package ejbModule.util; i ... -
为什么new FileOutPutStream和new File创建不了文件?java.io.FileNotFoundException 系统找不到指定的路径
2012-01-04 23:27 70329FileOutPutStream在c盘等一级目录 ... -
如何让页面一打开就远程自动下载文件
2012-01-03 19:52 2790在页面或者后台response,直接用文件头加你的文件,文件流 ... -
java如何打包zip等压缩文件
2012-01-03 19:35 2358直接调用jdk的类可以了。 package javai ... -
myclipse的export失败的一个问题
2011-09-25 12:48 1364在用eclipse将工程导出为jar或者可 ... -
Java如何定义三维数组
2011-09-10 20:21 12617java 定义三维数组,有很多方法,这里举两种: 1.直接定 ... -
一个Myeclipse视图跑出来,脱离窗口的问题
2011-02-13 17:16 3995也许经常使用Myeclipse的程序员会发现,视图窗口有 ... -
Map和Properties的遍历例子
2010-12-19 23:18 1274prperties的遍历有点麻烦,map的遍历有entrySe ... -
StringBuffer和Double.ValueOf一起用导致的错误
2010-12-04 16:36 2548StringBuffer虽然是同步的,然而如果不注意它的 ... -
Unicode和汉字的相互转化
2010-11-08 22:23 1409import java.util.regex.Matcher; ...
相关推荐
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
开一个子线程来完成一个循环处理的工作,我在主线程中能灵活控制这个子线程的开始、暂停/继续、结束。
主线程去控制子线程wait与notify
使用Java多线程的wait和notify方法实现最简单的生产者消费者模式
主要介绍了java多线程wait,notify,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面小编和大家一起来学习一下吧
一个理解wait()与notify()的例子,让你更好理解.
源码—Java多线程5—死锁和wait notify notifyAll
在 Java 中可以用 wait、notify 和 notifyAll 来实现线程间的通信。。举个例子,如果你的Java程序中有两个线程——即生产者和消费者,那么生产者可以通知消费者,让消费者开始消耗数据,因为队列缓冲区中有内容待...
考虑以下场景需求: 1.A同学计算一个结果res 2.B同学需要等待A同学的结果res 需要用到保护性暂停:一个线程等待另外一个线程的执行结果 这里我们让A,B同学关联到一个类。
wait,notify等线程知识.pdf
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
java多线程之wait,notify的用法([ 详解+实例 ]).
java中多线程编程notify、wait的使用
本篇文章是对java多线程wait()和notify()进行了详细的分析介绍,需要了解的朋友参考下
Java多线程的样例代码,工程,内含wait()、notify()和sychronized的使用范例。
3(深入理解Wait、Notify和Wait与sleep区别).rar
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
java多线程下wait和notify的作用
线程编程方面:反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改...若标志指出线程应当恢复,则用一个notify()重新启动线程。