两个线程依次打印“A”,“B”,用java怎么实现?
3个回答
展开全部
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();
}
}
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调度,时间片轮)。就算你设置了线程优先级,那也只是给操作系统的一个建议,可不是执行顺序。
你这个问题非要多线程,思路应该是线程算出结果,把结果交给调用者,调用者接到结果排序、打印或者其他处理。可以通过事件来弄。而不是线程的问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
代码就比较麻烦了 但是思路非常简单 利用线程同步就可以了
追问
线程同步太大了,就是能不能具体点呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询