资源预览内容
第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
亲,该文档总共3页全部预览完了,如果喜欢就下载吧!
资源描述
一个方法最多2个线程同时使用的JAVA实现比如下面这个类 class test public void methodA() /methodA同时有多个线程在访问,请问如何填充这个方法,使最多只有2个线程调用methodB,当调用完成后,其他那些方法才能继续调用 methodB(); private void method 比如下面这个类 class test public void methodA() /methodA同时有多个线程在访问,请问如何填充这个方法,使最多只有2个线程调用methodB,当调用完成后,其他那些方法才能继续调用 methodB(); private void methodB() 答案:重点是,1 保证只有2个实例可用,且每个实例的方法做成同步。1. import java.util.concurrent.BlockingDeque; 2. import java.util.concurrent.LinkedBlockingDeque; 3. 4. /* 5. * 一个方法最多2个线程同时使用的实现。 6. * 使用BlockingDeque保证同步的机制和阻塞访问。 7. * 8. * author 老紫竹 JAVA世纪网(java2000.net) 9. * 10. */ 11. public class Test extends Thread 12. public static void main(String args) 13. for (int i = 0; i 0) 21. OnlyTwo o = OnlyTwo.getInstance(); 22. o.test(); 23. OnlyTwo.returnInstance(o); 24. try 25. Thread.sleep(10); 26. catch (InterruptedException e) 27. e.printStackTrace(); 28. 29. 30. 31. 32. 33. class OnlyTwo 34. private static int NUM = 1; 35. private String name; 36. 37. private OnlyTwo() 38. name = NUM + NUM; 39. NUM+; 40. 41. 42. private static BlockingDeque data = new LinkedBlockingDeque( 43. 2); 44. static 45. data.push(new OnlyTwo(); 46. data.push(new OnlyTwo(); 47. 48. 49. public static OnlyTwo getInstance() 50. try 51. return data.takeFirst(); 52. catch (InterruptedException e) 53. e.printStackTrace(); 54. return null; 55. 56. 57. 58. public static void returnInstance(OnlyTwo t) 59. try 60. data.putLast(t); 61. catch (InterruptedException e) 62. e.printStackTrace(); 63. 64. 65. 66. publicvoid test() 67. / 实例同步,避免对象被重复使用 68. synchronized(this) 69. System.out.println(test + name); 70. 71. 72. 73. 这个是我唯一想到的办法,我会仔细看其它朋友的信号,标志方法。从原理上想,难度很高,因为修改信号也需要同步,如果全部同步,就只能保证一个线程能访问了。原文出处:中软卓越http:/www.zretc.com http:/www.5retc.com
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号