在a和b当中,在
synchronized(Data) {
Data.get();
Data.set();
...
}这样就不会冲突了
synchronized(Data) {
Data.get();
Data.set();
...
}这样就不会冲突了
解决方案 »
- JAVA程序如何隐藏图标
- flex自定义加载页面问题
- 如何把一个JPanel显示到java.awt.Canvas的上面?
- 如何设计一个架构,使得框架既符合SDO规范,又能用到hibernate庞大的持久化功能?
- 如何使一个TextBox不可用?
- 通过读取XML中的树信息,形成资源管理器样式的界面
- 要学编程了,求电脑配置!!!
- 用URL类 访问网络 抛出java.net.UnknownHostException 我通过局域网上网
- jdbc-odbc问题(急,在线等)
- 恩!!(step2 learning java)
- 我刚接触JAVA不久,遇到一些烦琐的问题,希望大家能帮忙解决!!
- 请问一个多线程synchronized同步的问题!!!!!!!!!!!!!!!!!!!!!!
synthronized(object){
同步语句
}
synchronized(Data) {
Data.get();
Data.set();
...
}
但是好象没效果
Data对象的一个方法:
public void outText(boolean threadA)
{
if(threadA)
{
try
{
System.out.print("Thread A start wait\n");
wait(3000);
System.out.print("Thread A wait Stop\n");
}
catch(Exception e)
{
System.out.print("Wait Exception "+ e.getMessage());
}
}
else
{
try
{
System.out.print("Thread B start wait\n");
wait(3000);
System.out.print("Thread B wait Stop\n");
}
catch(Exception e)
{
System.out.print("Wait Exception "+ e.getMessage());
}
}
}
线程A的调用代码:
for(int i=0; i<2;i++)
{
synchronized(lockData)
{
lockData.outText(true);
}
}线程B的调用代码:
for(int i=0; i<2; i++)
{
synchronized(tt.lockData)
{
tt.lockData.outText(false);
}
}运行后的输出结果:
Thread A start wait
Thread B start wait
Thread A wait Stop
Thread A start wait
Thread B wait Stop
Thread B start wait
Thread A wait Stop
Thread B wait Stop其中tt.lockData和lockData是同一个对象。从结果可以看出,在A线程还没Stop wait的时候,B线程也进入到了这个方法中,说明Data对象的outText方法两个线程可以同事访问。
请问是怎么原因?
A的get()和set()方法同步完成之后,在对B线程操作get()和set()
这样应该可以了吧
不知道说的对不对啊 见谅....