javadoc线程关键代码的编写教程

java doc线程在使用的时候需要我们不断学习相关问题,下面我们就详细的看看如何才能更好使用相关代码。wait(),notify(),notifyAll()不属于Thread类,而是属于Object基础类,也就是说每个对像都有wait(),notify(),notifyAll()的功能。

成都创新互联业务包括:成品网站、企业产品展示型网站建设、高端网站设计、电子商务型网站建设、外贸网站建设(多语言)、商城开发、按需求定制网站、全网营销推广等。效率优先,品质保证,用心服务是我们的核心价值观,我们将继续以良好的信誉为基础,秉承稳固与发展、求实与创新的精神,为客户提供更全面、更优质的互联网服务!

因为都个对像都有锁,锁是每个对像的基础,当然操作锁的方法也是最基础了.

先看java doc线程怎么说:

wait导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。当前的线程必须拥有此对象监视器。该线程发布对此监视器的所有权并等待,直到其他线程通过调用 notify 方法,或 notifyAll 方法通知在此对象的监视器上等待的线程醒来。然后该线程将等到重新获得对监视器的所有权后才能继续执行. #t#

notify唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。直到当前的线程放弃此对象上的锁定,才能继续执行被唤醒的线程。此方法只应由作为此对象监视器的所有者的线程来调用.

"当前的线程必须拥有此对象监视器"与"此方法只应由作为此对象监视器的所有者的线程来调用"说明wait方法与notify方法必须在同步块内执行,即synchronized(obj之内).

调用对像wait方法后,当前线程释放对像锁,进入等待状态.直到其他线程(也只能是其他线程)通过notify 方法,或 notifyAll.该线程重新获得对像锁.继续执行,记得线程必须重新获得对像锁才能继续执行.因为synchronized代码块内没有锁是寸步不能走的.看一个很经典的例子:

Java代码

 
 
 
  1. package ProductAndConsume; 
  2. import java.util.List; 
  3. public class Consume implements Runnable{ 
  4. private List container = null; 
  5. private int count; 
  6. public Consume(List lst){ 
  7. this.container = lst; 
  8. public void run() { 
  9. while(true){ 
  10. synchronized (container) { 
  11. if(container.size()== 0){ 
  12. try { 
  13. container.wait();//放弃锁 
  14. } catch (InterruptedException e) { 
  15. e.printStackTrace(); 
  16. try { 
  17. Thread.sleep(100); 
  18. } catch (InterruptedException e) { 
  19. // TODO Auto-generated catch block 
  20. e.printStackTrace(); 
  21. container.remove(0); 
  22. container.notify(); 
  23. System.out.println("我吃了"+(++count)+"个"); 
  24. package ProductAndConsume; 
  25. import java.util.List; 
  26. public class Product implements Runnable { 
  27. private List container = null; 
  28. private int count; 
  29. public Product(List lst) { 
  30. this.container = lst; 
  31. public void run() { 
  32. while (true) { 
  33. synchronized (container) { 
  34. if (container.size() > MultiThread.MAX) { 
  35. try { 
  36. container.wait(); 
  37. } catch (InterruptedException e) { 
  38. e.printStackTrace(); 
  39. try { 
  40. Thread.sleep(100); 
  41. } catch (InterruptedException e) { 
  42. e.printStackTrace(); 
  43. container.add(new Object()); 
  44. container.notify(); 
  45. System.out.println("我生产了"+(++count)+"个"); 
  46. package ProductAndConsume; 
  47. import java.util.ArrayList; 
  48. import java.util.List; 
  49. public class MultiThread { 
  50. private List container = new ArrayList(); 
  51. public final static int MAX = 5; 
  52. public static void main(String args[]){ 
  53. MultiThread m = new MultiThread(); 
  54. new Thread(new Consume(m.getContainer())).start(); 
  55. new Thread(new Product(m.getContainer())).start(); 
  56. new Thread(new Consume(m.getContainer())).start(); 
  57. new Thread(new Product(m.getContainer())).start(); 
  58. public List getContainer() { 
  59. return container; 
  60. public void setContainer(List container) { 
  61. this.container = container; 

以上就是对java doc线程的相关介绍。希望大家有所收获。

名称栏目:javadoc线程关键代码的编写教程
本文地址:http://www.shufengxianlan.com/qtweb/news4/47404.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联