synchronized关键字我基本明白它的作用,但不知道synchronized( ){}同步代码块的括号内的对象有什么作用。
比如这段代码public class Javase111116_Thread_2 { public static void main(String[] args) {
Share share=new Share();
MyThread t1=new MyThread(share);
MyThread t2=new MyThread(share);
t1.start();
t2.start();
}
}class MyThread extends Thread{
protected Share s;
public MyThread(Share ts){
s=ts;
}
public void run(){
s.show(this.getName());
}
}class Share{
protected Object o;
public Share(){
o=new Object();
}
public void show(String str){
synchronized(this){ //__________________________这里换成 synchronized(o){ 程序结果仍然不变,也就是说
并没有影响对代码块的加锁
for(int i=0;i<13000;i++){
System.out.println(str);
}
}
}
}那个Object o;没有什么实际意义只是为了代替"this"看看效果。所以请教各位:那个括号里的对象到底对synchronized同步代码块有什么作用和意义呢?
请各位赐教~~
比如这段代码public class Javase111116_Thread_2 { public static void main(String[] args) {
Share share=new Share();
MyThread t1=new MyThread(share);
MyThread t2=new MyThread(share);
t1.start();
t2.start();
}
}class MyThread extends Thread{
protected Share s;
public MyThread(Share ts){
s=ts;
}
public void run(){
s.show(this.getName());
}
}class Share{
protected Object o;
public Share(){
o=new Object();
}
public void show(String str){
synchronized(this){ //__________________________这里换成 synchronized(o){ 程序结果仍然不变,也就是说
并没有影响对代码块的加锁
for(int i=0;i<13000;i++){
System.out.println(str);
}
}
}
}那个Object o;没有什么实际意义只是为了代替"this"看看效果。所以请教各位:那个括号里的对象到底对synchronized同步代码块有什么作用和意义呢?
请各位赐教~~
解决方案 »
- 一个程序调制总是红色的地方有问题,大家帮我看下
- 网络聊天系统可以有多少个接口可以实现(象SOCKET)
- 怎么写一个自己的安全管理器,它判断用户的密码是否正确,如果正确就可以读写文件。大侠们帮忙
- 关于I/0的问题?
- JTextArea.setCaretPosition()方法的应用问题?
- jspyujasper
- ****能不能得到指定类中使用到的类?自己觉得比较有意思****
- 我怎么连HelloWorld!的程序都调试不通-初学者的无奈-100分在线等待
- jp.gr.java_conf.tame.swing.tree.*;
- 什么使class文件不能被反编译?
- 计算器中,怎么给按钮加动作?
- 关于泛型的一个错误,求解释
同步代码块的时候,就要指定一个共同的对象,来做为多个线程的同步锁. 只要能保证这些线程共用一个
就行.
o=new Object();
这个o 除了做同步锁用外,没有别的用处.用this 的话,不用再new 一个对象出来了.如果要在方法和代码块之间同步,就代码块就只能用this了,否则就没有办法同步了.