线程基础
2006-07-03 10:46
183 查看
线程基础---wait(),notify的应用一例
(作者:本例子实现了两个线程,每个线程输出1到100的数字。
第一个线程输出1-10,停止,通知第二个线程输出1-10第二个线程停止通知第一个线程输出11-20...
实现的要点是
在Java中,每个对象都有个对象锁标志(Objectlockflag)与之想关联,当一个线程A调用对象的一段synchronized代码时,
它首先要获取与这个对象关联的对象锁标志,然后执行相应的代码,执行结束后,把这个对象锁标志返回给对象;因此,在线程A执行
synchronized代码期间,如果另一个线程B也要执行同一对象的一段synchronized代码时(不一定与线程A执行的相同),它将
要等到线程A执行完后,才能继续....
如何利用wait()notify()notifyAll()?
在synchronized代码被执行期间,线程可以调用对象的wait()方法,释放对象锁标志,进入等待状态,并且可以调用notify()或者
notifyAll()方法通知正在等待的其他线程。notify()通知等待队列中的第一个线程,notifyAll()通知的是等待队列中的所有线程。
packagecom.chinajavalab.study.thread;
/**
*Title:Jasons'sJavaProjdect
*Copyright:Copyright(c)ChinaJavaLab
*Company:'target='_blank'>http://www.ChinaJavaLab.com[/code] *@authorjasonjason@ChinaJavaLab.com*@version1.0*/importjava.lang.Runnable;importjava.lang.Thread;publicclassDemoThreadimplementsRunnable{publicDemoThread(){TestThreadtestthread1=newTestThread(this,"1");TestThreadtestthread2=newTestThread(this,"2");testthread2.start();testthread1.start();}publicstaticvoidmain(String[]args){DemoThreaddemoThread1=newDemoThread();}publicvoidrun(){TestThreadt=(TestThread)Thread.currentThread();try{if(!t.getName().equalsIgnoreCase("1")){synchronized(this){wait();}}while(true){System.out.println("@timeinthread"+t.getName()+"="+t.increaseTime());if(t.getTime()%10==0){synchronized(this){System.out.println("****************************************");notify();if(t.getTime()==100)break;wait();}}}}catch(Exceptione){e.printStackTrace();}}}classTestThreadextendsThread{privateinttime=0;publicTestThread(Runnabler,Stringname){super(r,name);}publicintgetTime(){returntime;}publicintincreaseTime(){return++time;}}下载源程序 运行方法(forwindows):javac-d.DemoThread.javajava-classpath.;%classpath%com.chinajavalab.study.thread.DemoThread
相关文章推荐
- C#线程基础
- 线程基础知识
- java 线程基础知识
- Posix多线程编程学习笔记(一)—线程基础(2)
- 黑马程序员--java基础复习之多线程及线程间通信
- JAVA基础之线程通信
- 【简译】Windows 线程基础
- Thread 线程基础之-线程池ThreadPool<二>
- Java总结--线程基础
- 黑马程序员_JAVA基础4_线程,同步,单例
- linux环境编程之线程基础知识
- *Delphi线程基础知识
- Python基础:进程、线程、协程(1)
- java线程基础
- java线程基础
- 【Java基础 005】 线程synchronized和轮询
- 【Linux基础】线程概述
- 【Linux基础】线程发展历程
- Java基础回顾 : 线程的实现方式
- TTS零基础入门之拒绝界面卡顿--加入线程