| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 448 人关注过本帖
标题:同步问题
只看楼主 加入收藏
凌晨微风
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-11-27
收藏
 问题点数:0 回复次数:4 
同步问题

public class SynTest extends Thread{
Timer t=new Timer();
public static void main(String[]args){
SynTest s1=new SynTest();
SynTest s2=new SynTest();
s1.start();
s2.start();
}
public void run(){
t.add();
}

}
class Timer{
static Object o=new Object();
private static int num=0;
public void add(){
synchronized(o){
num++;
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("you are"+num+"ss");
}
}
}
这样写可以实现同步,但是如果把同步对象换成this的话却不可以,我觉得这里应该可以,不知道到底是什么原因?

搜索更多相关主题的帖子: private Object public 
2007-03-13 22:29
しΟν∈→鱈
Rank: 1
等 级:新手上路
威 望:2
帖 子:369
专家分:0
注 册:2006-10-25
收藏
得分:0 

[此贴子已经被作者于2007-3-14 18:25:18编辑过]


开开心心的过&玩每一天!!!!
2007-03-14 11:39
疯仁一踩
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2007-2-24
收藏
得分:0 

this是当前类的对象`
你已经设置了同步对象


2007-03-14 17:10
sea7
Rank: 2
等 级:新手上路
威 望:3
帖 子:291
专家分:0
注 册:2007-2-17
收藏
得分:0 
你使用0做同步对象时,因为0是静态对象,所以可以实现同步,
使用this就不一样了,this的同步对象是当前对象,而你创建了两个SynTest
而每个SynTest 都创建了t,所以同步对象就不是同一个,所以
不能同步啊!!!!

软件是一种修养
2007-03-14 17:40
lxx2844
Rank: 1
等 级:新手上路
威 望:2
帖 子:129
专家分:0
注 册:2006-12-5
收藏
得分:0 
同步方法synchronrized()的使用方法是一个线程进入程序之后相当于给外面上了一把锁,其他线程是进不去的,只有该线程执行完之后,其他线程才可一进入,如果换成“this”的话 ,只是执行了一个线程,

www./ Bst Love java!
2007-03-14 22:48
快速回复:同步问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022775 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved