reeten lock java_java synchronized同步问题的理解

java 中提到线程同步,其实有很多种方法,主流方法有3种,synchronized,Lock/ReetenLock,wait->notify机制

今天主要说明对synchronized的理解

首先要明白:java中的资源是指可共享的同一个对象资源(必须要能共享,否则不解释...,必须是同一件资源,否则也不解释...)

同步代码块

sychronized(obj)

{

//这里的obj最好是个类的成员变量或者当前类的对象this,必须是唯一的,可共享的(注:最好不要是静态变量,因为静态的具有全局性,

如果任务多的话,使用多线程,稍有逻辑处理不慎将变成死锁,这和静态同步方法类似)

}

普通同步方法

public synchronized void doTask(){

//这里锁住了 this

}

静态同步方法

public synchronized static void doTask(){

//这里锁住了类的Class,类Class是静态的,共享的资源  Class> thiz;

}

//等价于下面的形式

synchronized(MyClass.class){

}

下面给一个实例

class WorkTask implements Runnable {

private int counter = 100;

private boolean isDoTaskMethod;

public void setDoTaskMethod(boolean isDoTaskMethod)

{

this.isDoTaskMethod = isDoTaskMethod;

}

@Override

public void run() {

while (counter>=0)

{

System.out.println(Thread.currentThread().getName());

synchronized (this) {

counter--;

System.err.println("A==>"+counter);

}

doTask();

}

}

public synchronized void  doTask()

{

counter--;

isDoTaskMethod = true;

System.err.println("B==>"+counter);

}

}

public class TestWorkTask {

public static void main(String[] args) {

WorkTask wt = new WorkTask();

Thread t1 = new Thread(wt);

Thread t2 = new Thread(wt);

t1.start();

t2.start();

t1.yield();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值