- 浏览: 2290089 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (357)
- J2EE (49)
- JavaScript (40)
- Spring (19)
- Struts (5)
- CSS (8)
- Hibernate (16)
- Java (67)
- DWR (4)
- JSON (3)
- XFIRE (1)
- Tomcat (1)
- Ant (2)
- 设计模式 (2)
- 经典收藏 (2)
- JSP (10)
- Linux (0)
- WebLogic (11)
- myeclipse (13)
- Buffalo (4)
- 文件上传相关 (1)
- oracle (33)
- html (6)
- JSTL (3)
- SVN (2)
- GIT (1)
- 孙卫琴(Java网络编程精解) (1)
- DOM4J (2)
- Swing (1)
- AJAX (1)
- Eclipse (5)
- 日志组件 (3)
- PowerDesigner (1)
- Jquery (22)
- IT技术开发相关网址 (1)
- Nutz (1)
- 其它 (1)
- Velocity (3)
- WebService (1)
- MySql (2)
- Android (1)
- Maven (2)
- Quartz (11)
- Lucene (1)
- springsource (1)
- Junit (1)
- Activiti (0)
最新评论
-
yzlseu:
拼凑,没有营养
Activiti进阶—分配组任务 -
zhangsenhao:
非常赞!代码很清楚
SpringMVC3.0+MyIbatis3.0(分页示例) -
xiamw2000:
分页写得不对,应该是 : order by ${orderNa ...
SpringMVC3.0+MyIbatis3.0(分页示例) -
sheertewtw:
...
SpringMVC:上传与下载 -
kingtoon:
...
XSS之xssprotect
参考资料
Java多线程入门大全(适用于有一定基础者)
http://www.chinaitpower.com/A/2002-04-09/19260.html
Java多线程sleep(),join(),interrupt(),wait(),notify()
http://www.blogjava.net/fhtdy2004/archive/2009/06/08/280728.html
JAVA多线程suspend()、resume()和wait()、notify()的区别
http://luckyapple.iteye.com/blog/457298
总结如下:
1.有synchronized的地方不一定有wait,notify,notifyAll,
2.有wait,notify的地方必有synchronized.这是因为wait和notify不是属于线程类,而是每一个对象都具有的方法,而且,这两个方法都和对象锁有关,有锁的地方,必有synchronized.
3.如果要把notify和wait方法放在一起用的话,必须先调用notify后调用wait,因为如果调用完wait,该线程就已经不是current thread了.
4 推荐使用notifyAll.
一 synchronized的4种用法
1 方法声明时使用,放在范围操作符(public等)之后,返回类型声明(void等)之前.即一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候,当前线程(就是在synchronized方法内部的线程)执行完该方法后,别的线程才能进入.
2 对某一代码块使用synchronized后跟括号,括号里是变量,一次只有一个线程进入该代码块
3 synchronized后面括号里是一对象,此时,线程获得的是对象锁
4 synchronized后面括号里是类,只要线程进入,则该类中所有操作不能进行,包括静态变量和静态方法,实际上,对于含有静态方法和静态变量的代码块的同步,我们通常用4来加锁
示例如下:
输出结果如下:
网上有个示例不错,它是等待一个计算结果,如下:
Java多线程入门大全(适用于有一定基础者)
http://www.chinaitpower.com/A/2002-04-09/19260.html
Java多线程sleep(),join(),interrupt(),wait(),notify()
http://www.blogjava.net/fhtdy2004/archive/2009/06/08/280728.html
JAVA多线程suspend()、resume()和wait()、notify()的区别
http://luckyapple.iteye.com/blog/457298
总结如下:
1.有synchronized的地方不一定有wait,notify,notifyAll,
2.有wait,notify的地方必有synchronized.这是因为wait和notify不是属于线程类,而是每一个对象都具有的方法,而且,这两个方法都和对象锁有关,有锁的地方,必有synchronized.
3.如果要把notify和wait方法放在一起用的话,必须先调用notify后调用wait,因为如果调用完wait,该线程就已经不是current thread了.
4 推荐使用notifyAll.
一 synchronized的4种用法
1 方法声明时使用,放在范围操作符(public等)之后,返回类型声明(void等)之前.即一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候,当前线程(就是在synchronized方法内部的线程)执行完该方法后,别的线程才能进入.
public synchronized void synMethod() { //方法体 }
2 对某一代码块使用synchronized后跟括号,括号里是变量,一次只有一个线程进入该代码块
public int synMethod(int a1){ synchronized(a1) { //一次只能有一个线程进入 } }
3 synchronized后面括号里是一对象,此时,线程获得的是对象锁
public class MyThread implements Runnable { public static void main(String args[]) { MyThread mt = new MyThread(); Thread t1 = new Thread(mt, "t1"); Thread t2 = new Thread(mt, "t2"); t1.start(); t2.start(); } public void run() { synchronized (this) { System.out.println(Thread.currentThread().getName()); } } }
4 synchronized后面括号里是类,只要线程进入,则该类中所有操作不能进行,包括静态变量和静态方法,实际上,对于含有静态方法和静态变量的代码块的同步,我们通常用4来加锁
synchronized(A.class) { // }
示例如下:
public class MyRunnable implements Runnable { @SuppressWarnings("deprecation") @Override public void run() { System.out.println("咫尺天涯的第一个线程(Runnable)启动了。。。"); synchronized (this) { System.out.println("开始执行任务了..."); //模仿一个任务所要的时间 try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("任务完成了,我来叫醒你好吗?"); //推荐使用这种方式来唤醒线程上等待的对象 notifyAll(); } } }
public class Main { public static void main(String[] args) { MyRunnable myRunnable = new MyRunnable(); Thread runnable = new Thread(myRunnable,"咫尺天涯(Runnable)"); runnable.start(); synchronized (runnable) { try { System.out.println("快点完成任务呀,等待你来唤醒我。。。"); //当前线程A等待 runnable.wait(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("你叫醒我了..."); } } }
输出结果如下:
快点完成任务呀,等待你来唤醒我。。。 咫尺天涯的第一个线程(Runnable)启动了。。。 开始执行任务了... 任务完成了,我来叫醒你好吗? 你叫醒我了...
网上有个示例不错,它是等待一个计算结果,如下:
/** * 计算1+2+3 ... +100的和 * * @author leizhimin 2008-9-15 13:20:49 */ public class ThreadB extends Thread { int total; public void run() { synchronized (this) { for (int i = 0; i < 101; i++) { total += i; } //(完成计算了)唤醒在此对象监视器上等待的单个线程,在本例中线程A被唤醒 notify(); } } }
/** * 计算输出其他线程锁计算的数据 * * @author leizhimin 2008-9-15 13:20:38 */ public class ThreadA { public static void main(String[] args) { ThreadB b = new ThreadB(); //启动计算线程 b.start(); //线程A拥有b对象上的锁。线程为了调用wait()或notify()方法,该线程必须是那个对象锁的拥有者 synchronized (b) { try { System.out.println("等待对象b完成计算。。。"); //当前线程A等待 b.wait(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("b对象计算的总和是:" + b.total); } } }
发表评论
-
java json-lib & jQuery & jsonp
2016-06-30 11:31 831参考链接: 1、http://hanqunfeng.iteye ... -
随机分配算法(Intege)
2016-01-08 13:05 5201参考资料: http://blog.csdn.net/yaer ... -
XSS之xssprotect
2012-12-07 23:03 29495参考资料 1 跨网站脚本 ... -
Java之Thread(线程题)
2011-10-31 12:33 1976特别说明:java线程相关的参考了张孝祥老师的代码 参考资料 ... -
Java之ThreadLocal(Synchronized)
2011-10-31 10:10 2695参考资料 1 深入研究java.lang.ThreadLoca ... -
Java之synchronized,wait,notify结合运用示例
2011-10-26 11:54 5939场景一:要求二个线程各 ... -
Java之synchronized深入应用
2011-10-23 08:03 1947参考资料 1 java synchronized详解 http ... -
Java之Timer入门
2011-10-11 15:32 1697参考资料 1 java中timer用 ... -
Java之线程(匿名内部类)
2011-10-10 16:36 164371 Thread对象 Thread t = new Thr ... -
Java之线程(join)
2011-10-10 15:39 1485运用场景:多个线程之间 ... -
Java之线程(sleep,线程名)
2011-10-10 13:09 9718参考资料 1 Java线程:创建与启动 http://lava ... -
Java之线程入门
2011-10-10 11:11 1538参考资料 1 Java线程:概 ... -
java之表反向生成类
2011-09-23 16:41 3487环境:XP+JDK1.5+Oracle10g 注意事项 1 请 ... -
java之线程, NIO学习资料
2011-09-19 12:13 1134Concurrent In Java 6 第一部分 集合 ... -
Java之BigDecimal
2011-09-15 10:12 18033参考资料 1 java.math.BigDecimal的用法 ... -
java.lang.OutOfMemoryError异常解决方法
2011-08-27 16:47 2114转载:java.lang.OutOfMemoryError异常 ... -
Jcom之jp.ne.so_net.ga2.no_ji.jcom.JComException: createInstance() failed HRESULT=
2011-08-25 12:33 11748参考资料 java应用jcom将word转pdf http:/ ... -
Quartz之AnnualCalendar
2011-08-11 17:14 5823问题1 我想排除一年中 ... -
Quartz之InterruptableJob
2011-08-11 11:03 11783问题1 由于业务需要,停止Quartz中正在执行的任务 Qua ... -
Quartz之JobExecutionException
2011-08-11 10:06 13416问题1 如果你的任务执 ...
相关推荐
总结一下,`wait()`, `notify()`, 和 `notifyAll()` 是Java多线程编程中的核心工具,它们与`synchronized`关键字一起,为线程间的协作提供了强大的支持。理解并熟练掌握这些概念,对于编写高效、安全的多线程程序至...
在Java中,`wait()` 和 `notify()` 方法是实现线程间通信和协作的重要工具,它们属于 `java.lang.Object` 类,这意味着所有类都默认继承了这两个方法。本文将详细探讨如何使用 `wait()` 和 `notify()` 来控制子线程...
Java多线程中wait、notify、notifyAll使用详解 Java中多线程编程中,wait、notify、notifyAll三个方法是非常重要的,它们都是Object对象的方法,用于线程之间的通信。下面我们将详细介绍这三个方法的使用和作用。 ...
_java多线程wait、notify机制详解_ 在Java多线程编程中,wait和notify是两个非常重要的机制,用于实现线程之间的通信和同步。在本文中,我们将通过示例代码详细介绍Java多线程wait和notify的使用,帮助读者更好地...
Java之wait和notify的用法详解 在Java多线程编程中,wait和notify是两个非常重要的方法,它们都是Object类的方法,用于线程之间的通信和同步。下面我们将详细解释wait和notify的用法。 wait方法 wait方法是Object...
标题和描述概述的知识点主要集中在Java的多线程机制中,特别是`wait`和`notify`方法在同步锁中的应用。这些方法对于控制线程之间的交互至关重要,尤其是在资源有限或需要确保数据一致性的情况下。 ### Java同步锁...
在 Java 中可以用 wait、notify 和 notifyAll 来实现线程间的通信。。举个例子,如果你的Java程序中有两个线程——即生产者和消费者,那么生产者可以通知消费者,让消费者开始消耗数据,因为队列缓冲区中有内容待...
本文将深入探讨Java中的wait()、notify()和notifyAll()方法,以及synchronized关键字和原子操作在多线程环境中的应用。 1. **wait()方法**: - wait()是Object类的一个方法,它的作用是让当前线程暂停执行并释放它...
"Java多线程之wait(),notify(),notifyAll()" 在Java多线程编程中,wait(),notify(),notifyAll()是三个非常重要的方法,它们都是Object类中的方法,意味着每个对象都有这些方法。这些方法是用来实现线程之间的通信和...
`synchronized`关键字、`wait()`和`notify()`方法是Java多线程中用于控制并发访问共享资源的重要工具,它们是Java内存模型(JMM)的一部分,主要用于解决线程间的同步问题。 一、`synchronized`关键字 `...
Java 中Object的wait() notify() notifyAll()方法使用 在Java并发编程中,Object的wait()、notify()和notifyAll()方法是非常重要的概念,这三个方法都是Object类的方法,可以认为任意一个Object都是一种资源(或者...
同样,当线程使用wait方法时,它会主动释放锁并进入等待状态,直到其他线程调用notify或notifyAll方法来唤醒它。此外,sleep方法可以使线程进入阻塞状态一段时间,而join方法则允许一个线程等待另一个线程完成其任务...
Java中的多线程编程是构建高效并发应用的关键技术之一,其中`wait()`、`notify()`和`notifyAll()`是Java对象锁机制中的三个关键方法,它们位于`java.lang.Object`类中,主要用于线程间通信。本文将深入探讨`notify()...
本文旨在解析一个具体的Java多线程示例代码,以帮助读者更好地理解`wait()`与`notify()`方法的作用及其实现机制。这两个方法是Java中实现线程间通信的重要手段之一,尤其在解决生产者消费者模型、读者写者问题等经典...
### Java多线程设计之Wait/Notify机制详解 #### 一、引言 在Java并发编程中,`wait()`和`notify()`是非常重要的同步机制,它们通常与`synchronized`关键字一起使用,帮助开发者解决线程间的协作问题。本文将深入...
总结来说,Java的多线程设计中的wait/notify机制结合`synchronized`关键字,提供了高效且灵活的线程间协作方式,使得多个线程能够协同工作,有效管理共享资源。在实际开发中,正确理解和使用这些机制对于编写健壮的...
public class ThreadWaitNotify { public static void main(String[] args) throws InterruptedException { DemoTest demoTest = new DemoTest(); // 使用线程池异步执行waitTest方法 ExecutorService ...
在Java多线程编程中,`wait()`和`notify()`是两个非常重要的方法,它们用于线程间的协作和通信。这两个方法是Java语言中的Object类提供的,因此所有的对象都可以使用。在本文中,我们将深入探讨如何使用主线程来控制...
`wait()`、`notify()`和`notifyAll()`是Java中的三个关键字,它们属于Object类的方法,主要用于线程间的通信,尤其在实现生产者消费者模式时发挥着重要作用。本文将深入探讨这些方法以及如何在实际场景中应用它们。 ...
wait set——线程的休息室 wait方法——把线程放入wait set notify方法——从wait set拿出线程 notifyAll方法——从wait set拿出所有线程 wait、notify、notifyAll是Object类的方法 线程的状态移转 跟线程有关的其他...