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方法中定义同步呢?
{
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方法中定义同步呢?
按照偶自己的理解(也可能是曲解),按照你要的结果帮你修改了下:
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);
}
}