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

线程1和线程2分别打印10次后为:ABABABABABABABABABAB,说下思路和伪代码... 线程1和线程2分别打印10次后为:ABABABABABABABABABAB,说下思路和伪代码 展开
 我来答
流星不死
2014-02-12 · TA获得超过1662个赞
知道小有建树答主
回答量:1621
采纳率:0%
帮助的人:1304万
展开全部
造个类a继承 thread

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

然后类 a 和 主线程利用 wait 和notify 切换
追问
主要就是想问wait和notify这块怎么控制比较合适
追答
while(true) syn
{
printf a
wait
notify
}
wuzhuangren
2014-02-12 · 超过15用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:43.5万
展开全部
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调度,时间片轮)。就算你设置了线程优先级,那也只是给操作系统的一个建议,可不是执行顺序。


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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
没有响应m2
2014-02-12 · TA获得超过8387个赞
知道大有可为答主
回答量:7579
采纳率:33%
帮助的人:3451万
展开全部
代码就比较麻烦了 但是思路非常简单 利用线程同步就可以了
追问
线程同步太大了,就是能不能具体点呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式