Java中线程同步的synchronized()(同步方法块)这个括号里的参数是啥? 20

有的时候写的this,这个this指的是什么?有的又像是随便取的名字比如objA,这个objA是一个什么类型的对象啊?... 有的时候写的this,这个this指的是什么?有的又像是随便取的名字比如objA,这个objA是一个什么类型的对象啊? 展开
 我来答
无野楼升域醉0t
2018-12-06 · TA获得超过8552个赞
知道小有建树答主
回答量:1498
采纳率:88%
帮助的人:493万
展开全部
synchronized()、synchronized(this)、synchronized(类名.class)
synchronized加在非静态方法前和synchronized(this)都是锁住了这个类的对象,如果多线程访问,对象不同,就锁不住,对象固定是一个,就可锁住。
synchronized(类名.class)和加在静态方法前,是锁住了代码块,不管多线程访问的时候对象是不是同一个,能缩小代码段的范围就尽量缩小,能在代码段上加同步就不要再整个方法上加同步,缩小锁的粒度。
更多追问追答
追问
我还是不太理解,我只知道当当锁加在一个方法上就是当一个线程用这个方法时其他线程就不能用了,那这个锁方法块里面的参数是干嘛用的我完全不能理解😭
追答

自己感受一下

public class Synchronized {

 class Test {
public synchronized  void testFirst() {
print("testFirst");
}

public void testSecond() {
synchronized(this) {
print("testSecond");
}
}

public void testThird() {
synchronized(Test.class) {
print("testThird");
}
}

public  void print(String method) {
System.out.println(method + "start");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(method + "end");
}
}


class TestThread extends Thread {

public int mType = 0;
public Test mTest = null;

public TestThread(int type, Test test) {
this.mType = type;
this.mTest = test;
}

public void run() {
if (mTest == null) {
if (mType == 1) {
Test test = new Test();
test.testFirst();
}
else if (mType == 2) {
Test test = new Test();
test.testSecond(); 

else if (mType == 3) {
Test test = new Test();
test.testThird(); 
}
} else {
if (mType == 1) {
mTest.testFirst();
}
else if (mType == 2) {
mTest.testSecond(); 
}
else if (mType == 3) {
mTest.testThird(); 
}
}
}
}


public static void main(String[] args) {
Synchronized syn = new Synchronized();
Test test = syn.new Test();
for (int i = 0; i < 5; ++i) {
syn.new TestThread(1, null).start();
}
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式