码迷,mamicode.com
首页 > 编程语言 > 详细

Java synchronized同步 各方式略解

时间:2015-10-29 06:13:14      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:

  近段为了实现一个功能,在树结构中,修改某个节点名称时,需要同时修改这个节点所有子节点的节点全路径属性字段(类似"父父节点名称/父节点名称/子节点名称/子子节点名称"的构造)。因为在构造Update语句时,需要递归去查询子节点以及构造全路径的值,需要花费了一定的时间,等批量执行update语句时,可能子节点的某个子节点的名称又改变了,会引起冲突,故用到了synchronized,顺便了解了下实现方式,原理没深入了解,在此记录以便日后查看。

-----------------------------------------------------我是正文分割线--------------------我是正文分割线---------------------------

本文主要列举不同的同步方式,以及我理解的使用范围。

众所周知,同步分为两种用法:同步方法、与同步块。

一、同步块

1.1 类同步

· 实现方式:

技术分享
 1 public class JustPlayServiceImplSyn2 {
 2     
 3     public JustPlayServiceImplSyn2(){
 4         
 5     }
 6     private static int flag = 1;
 7     public void operate() { 
 8         synchronized(JustPlayServiceImplSyn2.class){
 9             flag++; 
10             try { 
11                 // 增加随机性,让不同线程能在此交替执行 
12                 Thread.sleep(new Random().nextInt(5)); 
13             } catch (InterruptedException e) { 
14                 e.printStackTrace(); 
15             } 
16             flag--; 
17             System.out.println("Thread: " + Thread.currentThread().getName() 
18                     + " /Current flag: " + flag);
19         }
20     }
21 }
View Code

· 测试代码:

技术分享
 1 public class JustPlay {
 2     /**
 3      * @param args
 4      */
 5     public static void main(String[] args) {
 6                new Thread("Thread-01") { 
 7                    public void run() { 
 8                        new JustPlayServiceImplSyn2().operate();
 9                     } 
10                }.start(); // 启动第一个线程
11                
12          new Thread("Thread-02") { 
13                    public void run() { 
14                        new JustPlayServiceImplSyn2().operate();
15                    } 
16                }.start(); // 启动第一个线程
17     }
18 }
View Code

· 使用范围:
使用范围最广,多线程多对象的同步,代码也简单,在需要同步的代码块上加上synchronized关键字,并在括号类用[类名.class]就行。

-----------------------------------------太晚了 有时间再补充--未完分割线-------------------

1.2 this同步

1.3 静态对象同步

二、同步方法

2.1 静态方法同步

2.2 非静态方法同步

 

Java synchronized同步 各方式略解

标签:

原文地址:http://www.cnblogs.com/jkgyu/p/4919223.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!