62,614
社区成员
发帖
与我相关
我的任务
分享
String s="";
LoopThread lt01=new LoopThread(al1,al2,al3,al4,al5,al6,al7,al8,al9,al10,bomal2,al11,s );
lt01.start();
LoopThread lt02=new LoopThread(al2,al3,al4,al5,al6,al7,al8,al9,al10,al1,bomal2,al11,s );
lt02.start();
LoopThread lt03=new LoopThread(al3,al4,al5,al6,al7,al8,al9,al10,al1,al2,bomal2,al11,s );
lt03.start();
LoopThread lt04=new LoopThread(al4,al5,al6,al7,al8,al9,al10,al1,al2,al3,bomal2,al11,s );
lt04.start();
LoopThread lt05=new LoopThread(al5,al6,al7,al8,al9,al10,al1,al2,al3,al4,bomal2,al11,s );
lt05.start();
LoopThread lt06=new LoopThread(al6,al7,al8,al9,al10,al1,al2,al3,al4,al5,bomal2,al11,s );
lt06.start();
LoopThread lt07=new LoopThread(al7,al8,al9,al10,al1,al2,al3,al4,al5,al6,bomal2,al11,s );
lt07.start();
LoopThread lt08=new LoopThread(al8,al9,al10,al1,al2,al3,al4,al5,al6,al7,bomal2,al11,s );
lt08.start();
LoopThread lt09=new LoopThread(al9,al10,al1,al2,al3,al4,al5,al6,al7,al8,bomal2,al11,s );
lt09.start();
LoopThread lt10=new LoopThread(al10,al1,al2,al3,al4,al5,al6,al7,al8,al9,bomal2,al11,s );
lt10.start();
public class Test
{
public static void main(String[] args)
{
StringBuilder s = new StringBuilder();
Object lock = new Object();
for (int i = 0; i < 10; i++)
{
new TestThread(i, s, lock).start();
}
}
}
class TestThread extends Thread
{
private int i; //线程编号
private StringBuilder s; //要处理的字符串
private Object lock; //互斥的工具
public TestThread(int i, StringBuilder s, Object lock)
{
this.i = i;
this.s = s;
this.lock = lock;
}
public void run()
{
while (true)
{
synchronized (lock)
{
s.append(i); //将自己的编号添加到字符串中
System.out.println(s); //打印这个字符串被哪些线程调用过
}
try
{
Thread.sleep(1000); //这里停一秒为了便于观察结果
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
public void run()
{
s.wait();
...
s.notify();
}
LoopThread {
private static String a;
public void run() {
a = sappend(a, s1, s2); // 这句话就已经脱离了synchronized控制范围,有并发问题
}
public synchronized static String sappend(String filter,String s1,String s2){
filter=filter+s1+"$"+s2+";";
return filter;
}
}
ArrayList<String> aList = new ArrayList<String>(1)
aList.add(s);
new LoopThread(...,aList);
...
LoopThread中:
ArrayList<String> aList = 传递来的aList;
public void changeValue(){
synchronized(aList){
aList.set(0, aList.get(0) + "asdf");
}
}