在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

java synchronized 多线程 分析

2017-3-7 12:53| 发布者: zhangjf| 查看: 1343| 评论: 0

摘要: 来自: http://blog.csdn.net//never_cxb/article/details/50378571 锁住对象和该对象对应的类 看下面的代码 class Sync { public void test() { synchronized (this) { System.ou ...

来自: http://blog.csdn.net//never_cxb/article/details/50378571


锁住对象和该对象对应的类

看下面的代码

  1. class Sync {
  2. public void test() {
  3. synchronized (this) {
  4. System.out.println("test开始..");
  5. try {
  6. Thread.sleep(1000);
  7. } catch (InterruptedException e) {
  8. e.printStackTrace();
  9. }
  10. System.out.println("test结束..");
  11. }
  12. }
  13. }
  14. class MyThread extends Thread {
  15. private Sync s;
  16. MyThread(Sync s) {
  17. this.s = s;
  18. }
  19. public void run() {
  20. s.test();
  21. }
  22. }
  23. public class aa {
  24. public static void main(String[] args) {
  25. for (int i = 0; i < 3; i++) {
  26. Sync sync = new Sync();
  27. Thread thread = new MyThread(sync);
  28. thread.start();
  29. }
  30. }
  31. }
复制代码

注意我们在 main 里面的 for 循环每次都新建了一个新的 Sync 对象,如果是synchronized (this) ,锁同一个对象,但是源代码是多个对象,所以没有锁的效果。输出:

  1. test开始..
  2. test结束..
  3. test开始..
  4. test结束..
  5. test开始..
  6. test结束..
复制代码

如果把 main 函数改为如下:

  1. public static void main(String[] args) {
  2. Sync sync = new Sync();
  3. for (int i = 0; i < 3; i++) {
  4. Thread thread = new MyThread(sync);
  5. thread.start();
  6. }
  7. }
复制代码

我们新建 Sync 对象放在 for 循环之外,所以只有一个 Sync 对象,被 this 锁住,输出是加锁的效果

  1. test开始..
  2. test结束..
  3. test开始..
  4. test结束..
  5. test开始..
  6. test结束..
复制代码

如果我们想对于多个 Sync 对象都加锁,那么需要用 synchronized (Sync.class), 实现锁这个类对应的Class对象。

  1. public void test() {
  2. synchronized (Sync.class) {
  3. System.out.println("test开始..");
  4. try {
  5. Thread.sleep(1000);
  6. } catch (InterruptedException e) {
  7. e.printStackTrace();
  8. }
  9. System.out.println("test结束..");
  10. }
  11. }
复制代码

输出结果是加锁的效果:

  1. test开始..
  2. test结束..
  3. test开始..
  4. test结束..
  5. test开始..
  6. test结束..
复制代码

Java线程同步:synchronized锁住的是代码还是对象

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-5-3 14:00

Copyright 2015-2025 djqfx

返回顶部