SyncBlock.java
上传用户:songled
上传日期:2022-07-14
资源大小:94k
文件大小:1k
源码类别:

进程与线程

开发平台:

Java

  1. public class SyncBlock extends Object {
  2. private Object longLock;
  3. public SyncBlock() {
  4. longLock = new Object();
  5. }
  6. public void doStuff() {
  7. print("about to try to get exclusive access " +
  8. "to longLock");
  9. synchronized ( longLock ) {
  10. print("got exclusive access to longLock");
  11. try { Thread.sleep(10000); } 
  12. catch ( InterruptedException x ) { }
  13. print("about to relinquish exclusive access to " +
  14. "longLock");
  15. }
  16. }
  17. private static void print(String msg) {
  18. String name = Thread.currentThread().getName();
  19. System.err.println(name + ": " + msg);
  20. }
  21. private static Thread launch(
  22. final SyncBlock sb, 
  23. String name
  24. ) {
  25. Runnable r = new Runnable() {
  26. public void run() {
  27. print("in run()");
  28. sb.doStuff();
  29. }
  30. };
  31. Thread t = new Thread(r, name);
  32. t.start();
  33. return t;
  34. }
  35. public static void main(String[] args) {
  36. try {
  37. SyncBlock sb = new SyncBlock();
  38. Thread t1 = launch(sb, "T1");
  39. Thread.sleep(500);
  40. Thread t2 = launch(sb, "T2");
  41. Thread t3 = launch(sb, "T3");
  42. Thread.sleep(1000);
  43. print("about to interrupt T2");
  44. t2.interrupt();
  45. print("just interrupted T2");
  46. } catch ( InterruptedException x ) {
  47. x.printStackTrace();
  48. }
  49. }
  50. }