3.多线程(同步、异步)

同步synchronized

    1.同步的概念就是共享资源,如果不是为了共享资源没必要进行同步;同步的目的就是为了线程安全,线程安全只需要满足特性:原子性(同步)、可见性

 

  1. package demo1;
  2. /**
  3. * Created by liudan on 2017/5/30.
  4. */
  5. public class MyThread3 {
  6. private synchronized void method1() {
  7. try {
  8. System.err.println("线程:" + Thread.currentThread().getName());
  9. Thread.sleep(2000);
  10. } catch (InterruptedException e) {
  11. e.printStackTrace();
  12. }
  13. }
  14. private synchronized void metho2() {
  15. System.err.println("线程:" + Thread.currentThread().getName());
  16. }
  17. public static void main(String[] agrs) {
  18. /**
  19. * 描述:1. a线程先获取t对象的锁,b线程可以异步访问t对象中 metho2() 无 synchronized 修饰的方法
  20. * 2. a线程先获取t对象的锁,b线程争取去获取t对象的锁,这个时候对象使用都了同步 synchronized 修饰方法,a线程 sleep 休眠5秒、metho2()锁还没释放;5秒过后,锁被释放掉;
  21. * b这个时候才真正的拿到t对象的锁,去访问 metho2 方法。
  22. */
  23. MyThread3 t = new MyThread3();
  24. Thread a = new Thread(new Runnable() {
  25. @Override
  26. public void run() {
  27. t.method1();
  28. }
  29. }, "t1");
  30. Thread b = new Thread(new Runnable() {
  31. @Override
  32. public void run() {
  33. t.metho2();
  34. }
  35. }, "t2");
  36. a.start();
  37. b.start();
  38. }
  39. }
  40. 线程:t1
  41. (延迟2秒)synchronized void metho2( 线程:t2

 

posted @ 2017-08-10 02:09  逍遥叹!!  阅读(220)  评论(0编辑  收藏  举报