`
大器晚成
  • 浏览: 51481 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

java 线程等待原理

阅读更多
public class TestThread {
	
	int count=0;
	Object lock=new Object();
	transient boolean isWorking=true;
	Thread t1=new Thread(){
		public void run() {
			while(true){
				try {
					if(count++%10==0){
						System.out.println("睡觉");
						isWorking=false;
						synchronized (lock) {
							lock.wait();
						}
						isWorking=true;
						System.out.println("睡醒了");
					}else{
						System.out.println("睡"+count);
						Thread.sleep(100);
					}	
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	};
	
	Thread t2=new Thread(){
		public void run() {
			while (true) {
				try {
					if(!isWorking){
						System.out.println("醒醒啦!");
						synchronized (lock) {
						lock.notify();
						}
					}
					Thread.sleep(2000);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	};
	
	public TestThread() {
		t1.start();
		t2.start();
	}
	public static void main(String[] args) {
		new TestThread();
	}
}


public class TestThread {

int count=0;
Object lock=new Object();
transient boolean isWorking=true;
Thread t1=new Thread(){
public void run() {
while(true){
try {
if(count++%10==0){
System.out.println("睡觉");
isWorking=false;
synchronized (lock) {
lock.wait();
}
isWorking=true;
System.out.println("睡醒了");
}else{
System.out.println("睡"+count);
Thread.sleep(100);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
};

Thread t2=new Thread(){
public void run() {
while (true) {
try {
if(!isWorking){
System.out.println("醒醒啦!");
synchronized (lock) {
lock.notify();
}
}
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
};

public TestThread() {
t1.start();
t2.start();
}
public static void main(String[] args) {
new TestThread();
}
}
0
0
分享到:
评论

相关推荐

    Java线程等待用法实例分析

    主要介绍了Java线程等待用法,结合实例形式分析了obj.wait()实现线程等待相关原理与操作技巧,需要的朋友可以参考下

    龙果 java并发编程原理实战

    龙果 java并发编程原理实战 第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四...

    Java等待唤醒机制线程通信原理解析

    主要介绍了Java等待唤醒机制线程通信原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Java并发编程原理与实战

    从Java字节码的角度看线程安全性问题.mp4 synchronized保证线程安全的原理(理论层面).mp4 synchronized保证线程安全的原理(jvm层面).mp4 单例问题与线程安全性深入解析.mp4 理解自旋锁,死锁与重入锁.mp4 深入...

    JAVA CAS实现原理与使用.docx

    在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁(后面的章节还会谈到锁)。 锁机制存在以下问题: ...(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。

    Java 并发编程原理与实战视频

    java并发编程原理实战 第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个...

    Java NIO原理解析

    Java NIO原理解析jdk供的无阻塞I/O(NIO)有效解决了多线程服务器存在的线程开销问题,但在使用上略显得复杂一些。在NIO中使用多线程,主要目的已不是为了应对每个客户端请求而分配独立的服务线程,而是通过多线程...

    Java多线程基础 线程的等待与唤醒(wait、notify、notifyAll)

    主要介绍了Java多线程基础 线程的等待与唤醒,需要的朋友可以参考下

    《Java并发编程的艺术》源代码

    Java线程之间的通信对程序员完全透明,内存可见性问题很容易困扰Java程序员,本章试图揭开Java内存模型的神秘面纱。 第4章从介绍多线程技术带来的好处开始,讲述了如何启动和终止线程以及线程的状态,详细阐述了多...

    Java NIO原理和使用

    Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内容,如果没有内容进来,...

    JAVA多线程精讲下

    通过本门课程的学习你可以深刻理解Java多线程的原理及实现运行机制,深刻学习多线程的生命周期、调度、控制等内容。 多线程精讲下课程内容涵盖如下:l 线程的同步(线程安全问题)l 线程的死锁l 线程间通信l ...

    java源码包---java 源码 大量 实例

    第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第三步:在登陆后的界面文本框输入文本,然后发送 可以同时启动...

    java实现内存动态分配

    每运行一个java程序会产生一个java进程,每个java进程可能包含一个或者多个线程,每一个Java进程对应唯一一个JVM实例,每一个JVM实例唯一对应一个堆,每一个线程有一个自己私有的栈。进程所创建的所有类的实例(也...

    【2018最新最详细】并发多线程教程

    12.详解Condition的await和signal等待通知机制 13.LockSupport工具 14.并发容器之ConcurrentHashMap(JDK 1.8版本) 15.并发容器之ConcurrentLinkedQueue 16.并发容器之CopyOnWriteArrayList 17.并发容器之ThreadLocal...

    JAVA上百实例源码以及开源项目

    第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第三步:在登陆后的界面文本框输入文本,然后发送 可以同时启动...

    JAVA上百实例源码以及开源项目源代码

    第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第三步:在登陆后的界面文本框输入文本,然后发送 可以同时启动...

    完结13章一课掌握Java并发编程精髓

    2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。 线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程...

    深入理解Java并发之synchronized实现原理.docx

    在 Java 中,关键字 synchronized可以保证在同一个时刻,只有一个线程可以执行某个方法或者某个代码块(主要是对方法或者代码块中存在共享数据的操作),同时我们还应该注意到synchronized另外一个重要的作用,...

    java源码包4

    第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第三步:在登陆后的界面文本框输入文本,然后发送 可以同时...

Global site tag (gtag.js) - Google Analytics