2017-08-09 22 views
0

我需要一些帮助来创建一个程序,该程序在Java中使用线程(总是按照该顺序)打印ABC,其中每个线程都应该是一个字母。在Java中使用带加入的线程打印ABC

我是Java中的线程新手。

要求是我必须用join(),主程序只能有对象的创建和线程的启动。

无法在主程序中使用连接。不能使用睡眠。也不能使用连接参数,如连接(1000),它应该只有连接()。

这是我迄今所做的:

public class Write extends Thread 
{ 
private String letter; 

public Write(String letter) 
{ 
    this.letter = letter; 
} 

@Override 
public void run() 
{  
    try 
    { 
     if (letter == "A") 
     { 
      this.join(); 
      System.out.print(letter); 
     } 
     else if (letter == "B") 
     { 
      this.join(); 
      System.out.print(letter);   
     } 
     else if (letter == "C") 
     { 
      System.out.print(letter); 
     } 
    } 
    catch (InterruptedException ie) 
    { 
      ie.printStackTrace(); 
    } 
    } 
} 

public class TestWrite { 

public static void main(String[] args) { 

    Write letter1 = new Write("A"); 
    Write letter2 = new Write("B"); 
    Write letter3 = new Write("C"); 

    letter1.start(); 
    letter2.start(); 
    letter3.start(); 

} 

} 

上面的代码是行不通的,只会打印C和挂起。有人能给我一些关于如何做这项工作的指导吗?

谢谢, 菲利普

+0

您是否看到https://stackoverflow.com/questions/27370037/print-odd-and-even-using-two-threads-in-java?rq=1? – 2017-08-09 17:18:22

+1

你不能使用==与字符串 – 2017-08-09 17:21:32

+2

if(letter ==“A”)' - > [如何比较Java中的字符串?](https://stackoverflow.com/questions/513832/how-do -i-compare-strings-in-java) – Pshemo

回答

2

join功能是阻塞直到呼叫者螺纹光洁度。所以你需要在你正在等待的东西上调用这个函数。在你的情况下,C等待B,B等待A并且A是独立的。

public class Write extends Thread 
{ 
    private String letter; 
    private Write previous; 

    public Write(String letter, Write previous) 
    { 
     this.letter = letter; 
     this.previous = previous; 
    } 

    @Override 
    public void run() 
    { 
     if (previous != null) { 
      try { 
       previous.join(); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
     System.out.print(letter); 
    } 
} 
+0

这工作很好。非常感谢你。 – Filipe

+0

如果这有助于您不要犹豫,将其标记为已解决:) – jeanr