JAVA多线程编程,创建3个线程分别打印A,B和C,打印10次

例如打印效果ABCABCABC.....10次,是有次序的ABC.不能乱哦效果如下:线程1打印A线程2打印B线程3打印C线程1打印A线程2打印B线程3打印C线程1打印A线... 例如打印效果ABCABCABC.....10次,是有次序的ABC.不能乱哦
效果如下:
线程1打印A
线程2打印B
线程3打印C
线程1打印A
线程2打印B
线程3打印C
线程1打印A
线程2打印B
线程3打印C
..............
这种持续打印10次的格式
展开
 我来答
dgqjava
2014-12-11 · TA获得超过265个赞
知道小有建树答主
回答量:147
采纳率:100%
帮助的人:59.1万
展开全部
public class Test implements Runnable {
 
    private static volatile String msg = "线程一打印A";
    private String message;
    private String next;
     
    public Test(String message, String next) {
        this.message = message;
        this.next = next;
    }
     
    public static void main(String[] args) {
        new Thread(new Test("线程一打印A", "线程二打印B")).start();
        new Thread(new Test("线程二打印B", "线程三打印C")).start();
        new Thread(new Test("线程三打印C", "线程一打印A")).start();
    }
 
    public void run() {
        for(int i = 0; i < 10;) {
            if(this.message.equals(Test.msg)) {
                System.out.println(this.message);
                Test.msg = next;
                i++;
            }
        }
    }
}

 这样写不需要同步代码, 应该会更自然点

小童鞋_成er
2014-12-11 · 知道合伙人数码行家
小童鞋_成er
知道合伙人数码行家
采纳数:4650 获赞数:22879
主要从事J2EE工作,热爱Java,用心讨论技术,共同进步。

向TA提问 私信TA
展开全部
public class Main001 {
public static void main(String[] args) {
Threands t = new Threands();
new Thread(t).start();//线程1
new Thread(t).start();//线程2
new Thread(t).start();//线程3

}
}
class Threands implements Runnable{
private String[] arr = {"ABC","ABC","ABC","ABC","ABC","ABC","ABC","ABC","ABC","ABC"};
private int i = 0;
public synchronized void run(){
for( ; i < arr.length; i++){
System.out.print(arr[i]);
}
}
}
//或者更简单
class Threands implements Runnable{
//private String[] arr = {"ABC","ABC","ABC","ABC","ABC","ABC","ABC","ABC","ABC","ABC"};
private String str = "ABC";
private int i = 0;
public synchronized void run(){
for( ; i < 10; i++){
System.out.print(str);
}
}
}
更多追问追答
追问
可能是我没说明白.分别打印A,B和C.
比如效果:
线程1打印A
线程2打印B
线程3打印C
线程1打印A
线程2打印B
线程3打印C
线程1打印A
线程2打印B
线程3打印C
..............
这种持续打印10次的格式
追答
小菜一碟!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dark19861201
推荐于2017-10-09 · TA获得超过2153个赞
知道大有可为答主
回答量:2584
采纳率:79%
帮助的人:1792万
展开全部
public class TestThread {

 private static String status = "A";

 public static void main(String[] args) {

  new Thread(new Runnable() {

   @Override

   public void run() {

    int count=10;

    for(int i=0;i<count;){

     synchronized (status) {

      if(status.equals("A")){

       System.out.print("A");

       status="B";

       i++;

      }

     }

    }

   }

  }).start();

  new Thread(new Runnable() {

   @Override

   public void run() {

    int count=10;

    for(int i=0;i<count;){

     synchronized (status) {

      if(status.equals("B")){

       System.out.print("B");

       status="C";

       i++;

      }

     }

    }

   }

  }).start();

  new Thread(new Runnable() {

   @Override

   public void run() {

    int count=10;

    for(int i=0;i<count;){

     synchronized (status) {

      if(status.equals("C")){

       System.out.print("C");

       status="A";

       i++;

      }

     }

    }

   }

  }).start();

 }
追问
我试了,效果是没问题.
这个在实际应用当中用这种方式是否是比较准确,还有更优化的方式么.就是完全用线程来弄,不用判断A或者B或者C
追答
这个明显不可能,你要多线程运行,还要他们按规定的顺序,你不做同步不可能的呀
举个例子,线程B必须在线程A打印后立刻执行,而且要保证不让线程C抢先执行,所以必须要做一定的监控,不可能放着所有的线程自由执行
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
清亮又清脆灬小喵Z
2014-12-13 · 超过13用户采纳过TA的回答
知道答主
回答量:304
采纳率:0%
帮助的人:33.4万
展开全部
是什么用了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式