两个线程依次打印“A”,“B”,用java怎么实现?

线程1和线程2分别打印10次后为:ABABABABABABABABABAB,说下思路和伪代码

造个类a继承 thread

类a run方法 while(true)printf a
主线程 while(ture)printf b

然后类 a 和 主线程利用 wait 和notify 切换追问

主要就是想问wait和notify这块怎么控制比较合适

追答

while(true) syn
{
printf a
wait
notify
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-12
public class ThreadTest extends Thread{

private int count = 10;
public String s;
public void run()
{
while(this.count > 0)
{
this.count = this.count -1;
System.out.println(s);
try {
this.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

public static void main(String[] args) {

ThreadTest test1 = new ThreadTest();
ThreadTest test2 = new ThreadTest();

test1.s = "A";
test2.s = "B";

test1.start();
test2.start();
}

}追问

这个无法实现依次打印的,当然也有可能恰好依次打印,但是肯定是不可控的。

追答

既然AB是固定顺序,那就是一个过程的问题,为什么要2个线程?

1个线程输出 AB 就结了


算了,你非要2个线程,我这一个办法:把2线程放在队列里,顺序执行。


  import java.util.ArrayList;
  import java.util.List;
  public class ThreadTest extends Thread{
  public String s;
  public void run()
  {
  System.out.println(s);
  }
  public static void main(String[] args) {
  int count = 10;
  List list = new ArrayList();
  ThreadTest test1 = new ThreadTest();
  ThreadTest test2 = new ThreadTest();
  test1.s = "A";
  test2.s = "B";
  list.add(test1);
  list.add(test2);
  while(count > 0)
  {
  for(int i=0;i<list.size();i++)
  {
  Thread t = (Thread)list.get(i);
  if(t.getState() != State.NEW)
  {
  t.start();
  }
  else
  {
  t.run();
  }
  }
  count = count -1;
  try {
  Thread.sleep(1000);
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
  }
  }
  }

 

上边这个也不是绝对。因为只是打印一个字母,如果线程执行的东西复杂,那这个办法也不是绝对的。因为线程的执行先后不是程序说了算,而是操作系统说了算(CPU调度,时间片轮)。就算你设置了线程优先级,那也只是给操作系统的一个建议,可不是执行顺序。


你这个问题非要多线程,思路应该是线程算出结果,把结果交给调用者,调用者接到结果排序、打印或者其他处理。可以通过事件来弄。而不是线程的问题。

第2个回答  2014-02-12
代码就比较麻烦了 但是思路非常简单 利用线程同步就可以了追问

线程同步太大了,就是能不能具体点呢?

相似回答