我是靠谱客的博主 美满板凳,最近开发中收集的这篇文章主要介绍java 多线程之Sychronization的三种使用情况,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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;
@Override
public 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--);
}
}
}

最后

以上就是美满板凳为你收集整理的java 多线程之Sychronization的三种使用情况的全部内容,希望文章能够帮你解决java 多线程之Sychronization的三种使用情况所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部