java 多线程之Sychronization的三种使用情况
来源:互联网 发布:淘宝店铺运营方案 编辑:程序博客网 时间:2024/05/17 00:02
java 多线程之Sychronization的三种使用情况
1.同步代码块 锁对象可以是任意的对象
2.普通同步方法 锁对象默认是是 this
3.静态同步方法 锁对象是当前类的class对象
测试这三种情况下的锁对象 如下:
主类
package Sychronization;/** * 测试类 * @author feige */public class SychronizationDemo { public static void main(String[] args) { MyRunnable mr=new MyRunnable(); Thread th1=new Thread(mr,"阿飞"); Thread th2=new Thread(mr,"阿瑞"); Thread th3=new Thread(mr,"靳杨"); th1.start(); th2.start(); th3.start(); }}
同步代码块的MyRunnable类 :
package Sychronization;public class MyRunnable implements Runnable { //定义全局变量 private static int ticket=1000; private Object obj=new Object(); private int x=1; @Overridepublic void run() { while(true){ if(x%2==0){ synchronized(obj){//obj 同步锁必须锁住的是同一个对象 if(ticket>0){ x++; System.out.println(Thread.currentThread().getName()+":"+ticket--); } } } else{ synchronized(obj){//obj 同步锁必须锁住的是同一个对象 if(ticket>0){ x++; System.out.println(Thread.currentThread().getName()+":"+ticket--); } } } } }}
普通同步方法的MyRunnable类 :
package Sychronization;public class MyRunnable implements Runnable { //定义全局变量 private static int ticket=1000; private Object obj=new Object(); private int x=1; @Override public void run() { while(true){ if(x%2==0){ synchronized(this){ if(ticket>0){ x++; System.out.println(Thread.currentThread().getName()+":"+ticket--); } } } else{ show(); } } } public synchronized void show(){ if(ticket>0){ x++; System.out.println(Thread.currentThread().getName()+":"+ticket--); } }}
静态同步方法的MyRunnable类 :
package Sychronization;public class MyRunnable implements Runnable { //定义全局变量 private static int ticket=1000; private Object obj=new Object(); private static int x=1; @Override public void run() { while(true){ if(x%2==0){ synchronized(MyRunnable.class){ if(ticket>0){ x++; System.out.println(Thread.currentThread().getName()+":"+ticket--); } } } else{ show(); } } } public static synchronized void show(){ if(ticket>0){ x++; System.out.println(Thread.currentThread().getName()+":"+ticket--); } }}
0 0
- java 多线程之Sychronization的三种使用情况
- Java 多线程编程之三:synchronized 关键字的使用
- java多线程之三
- JavaScript使用分号的三种情况
- iOS 多线程的使用情况
- java取整的三种情况
- java多线程(三) 之 对象的共享
- Java多线程学习1,使用线程的三种方式
- Java并发笔记二——sychronization
- Java基本知识之三(多线程)
- 查看多线程使用cpu的情况
- synchronized在多线程情况下的使用
- 多线程的使用(4) - iOS多线程的三种方式
- 多线程的使用(4) - iOS多线程的三种方式
- 多线程的使用(4) - iOS多线程的三种方式
- 创建使用多线程的 三种方式
- Java并发之神修炼之路---创建多线程的三种方式
- java多线程之Condition的使用
- 手机游戏开发中如何选择适合的纹理格式
- 【高性能】Mellanox交换机基本设置
- Java类加载器总结
- 一个新的开始!
- 当遇到error: stray '\241' in program错误的解决方法
- java 多线程之Sychronization的三种使用情况
- POJ 1125 Stockbroker Grapevine
- Android应用开发SharedPreferences存储数据的使用方法
- Asynctask实现源码分析
- bzoj 4590: [Shoi2015]自动刷题机
- Spring Boot实战之定时任务
- C#控制台基础 helloworld之 用类中的普通委托的事件输出
- JavaScript 学习(二)之基本用法
- 夜神模拟器SD卡文件存储位置