线程同步问题,帮下!

wusilou 2007-12-11 12:21:25
class Alone extends Thread
{
static Object output=new Object();
int[] array;
static StringBuffer sb=new StringBuffer();
public Alone(int[] array)
{
this.array=array;
}
public void addLeft()
{
for(int i=0;i<array.length/2;i++)
{
sb.append(array[i]);
}
}
public void addRight()
{
for(int i=array.length/2;i<array.length;i++)
{
sb.append(array[i]);
}
}
public void run()
{
addLeft();
addRight();
}
public static void main(String[] args)
{
Alone a=new Alone(new int[]{1,1,1,1,2,2,2,2});
Alone b=new Alone(new int[]{3,3,3,3,4,4,4,4});
a.start();
b.start();
try
{
a.join();
b.join();
}
catch(InterruptedException e)
{
System.out.println(e.getMessage());
}
System.out.println(sb);
}
}
我想要的结果是:
情况1:1111333322224444
情况2:3333111144442222
我应该如何在run方法中定义同步呢?
...全文
185 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wusilou 2007-12-11
  • 打赏
  • 举报
回复
看不见的?
Geek618 2007-12-11
  • 打赏
  • 举报
回复
你需要完成什么样的功能,没有描述,看了你写的这个测试,猜测:可能是:A对象放过之后,B接着放东西到同一个地方,然后又轮到A···
按照偶自己的理解(也可能是曲解),按照你要的结果帮你修改了下:
package com.syn;
public class Alone extends Thread
{
static Object output=new Object();
int[] array;
static StringBuffer sb=new StringBuffer();
static boolean done=false;
public Alone(int[] array)
{
this.array=array;
}
public synchronized void addLeft()
{

for(int i=0;i <array.length/2;i++)
{
sb.append(array[i]);
}
try{
Thread.sleep(200);
}catch(Exception e){
e.printStackTrace();
}
}
public synchronized void addRight()
{
for(int i=array.length/2;i <array.length;i++)
{
sb.append(array[i]);
}
try{
Thread.sleep(200);
}catch(Exception e){
e.printStackTrace();
}
}
public void run()
{
addLeft();
addRight();
}
public static void main(String[] args)
{
Alone a=new Alone(new int[]{1,1,1,1,2,2,2,2});
Alone b=new Alone(new int[]{3,3,3,3,4,4,4,4});
a.start();
b.start();
try{
Thread.sleep(5000);
}catch(Exception e){
e.printStackTrace();
}
System.out.println(sb);
}
}
OnlyLikeJava 2007-12-11
  • 打赏
  • 举报
回复
其实你只需要对sb对象进行同步即可。如果你想在run方法里进行同步的话可以先定义一个static final变量,然后同步这个变量即可。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧