Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同步两个线程_Java_Multithreading_Synchronization - Fatal编程技术网

Java 同步两个线程

Java 同步两个线程,java,multithreading,synchronization,Java,Multithreading,Synchronization,我有两个线程,我希望第二个线程等到第一个线程完成。我怎样才能做到这一点 这是我的代码: public class NewClass1 implements Runnable { // in main CallMatlab c = new CallMatlab(); CUI m = new CUI(); Thread t1 = new Thread(c); t1.start(); Thread t2 = new Thread(m); try

我有两个线程,我希望第二个线程等到第一个线程完成。我怎样才能做到这一点

这是我的代码:

public class NewClass1 implements Runnable {

    // in main
    CallMatlab c = new CallMatlab();
    CUI m = new CUI();
    Thread t1 = new Thread(c);
    t1.start();
    Thread t2 = new Thread(m);
    try {
      t1.join();
    } catch (InterruptedException ex) { 
      Logger.getLogger(NewClass1.class.getName()).log(Level.SEVERE, null, ex);
    }
    t2.start();

  //
  public void run() {
    throw new UnsupportedOperationException("Not su..");
  }
}
使用该方法。从第二个线程调用

firstThread.join();
还有一些可选的重载也需要超时。如果第二个线程在第一个线程完成之前被中断,您需要处理中断异常。

使用该方法。从第二个线程调用

firstThread.join();
还有一些可选的重载也需要超时。如果第二个线程在第一个线程完成之前被中断,您需要处理中断异常。

您需要调用:

first_thread.join();
从第二个线程开始

请参阅。

您需要拨打:

first_thread.join();
从第二个线程开始


请参阅。

除非第一个线程与第二个线程同时执行一些有用的操作,否则最好使用一个线程。如果它们都在做一些有用的事情,请按照建议使用join()。

除非第一个线程与第二个线程同时做一些有用的事情,否则最好使用一个线程。如果他们都在做一些有用的事情,那么按照建议使用join()。

为了涵盖所有基本内容,您还可以使用信号量

在服务生的房间里

/* spawn thread */
/* Do interesting stuff */
sem.acquire();
侍应生

/* wake up in the world */
/* do intersting stuff */
sem.release();

如果等待者要终止,这种方法决不是最好的,但是信号量很有趣,所以我认为值得一提。

为了涵盖所有基本内容,您也可以使用信号量

在服务生的房间里

/* spawn thread */
/* Do interesting stuff */
sem.acquire();
侍应生

/* wake up in the world */
/* do intersting stuff */
sem.release();

这种方法在服务商即将终止的情况下绝非优越,但信号量很有意思,所以我认为这是值得说明的。

你也可以考虑使用这个包。CountDownLatch或CyclicBarrier可用于协调线程,而执行器则用于管理并发任务 这个my code公共类NewClass1实现了Runnable{in main CallMatlab c=new CallMatlab();CUI m=new CUI();Thread t1=new Thread(c);t1.start();Thread t2=new Thread(m);try{t1.join();}catch(InterruptedException ex){Logger.getLogger(NewClass1.class.getName()).log(Level.SEVERE,null,ex)}t2.start();public void run(){抛出新的不支持操作异常(“Not su…”);这是我的代码公共类NewClass1在主调用Matlab c=new CallMatlab()中实现Runnable{;CUI m=new CUI();Thread t1=new Thread(c);t1.start();Thread t2=new Thread(m);try{t1.join();}catch(InterruptedException ex){Logger.getLogger(NewClass1.class.getName()).log(Level.SEVERE,null,ex);}t2.start();public void run(){抛出新的UnsupportedOperationException(“Not su…”);@MOUZA:您已经在一条评论中发布了您的代码,这几乎是不可读的…请通过编辑问题将其包含在问题中。将其缩进四个空格,它将在问题中被很好地格式化。我添加了它,但它不是一个完整的工作代码示例(可能是为了放在评论框中而精简的)@MOUZA:你已经在一条评论中发布了你的代码,这几乎是不可读的…请通过编辑问题将其包含在问题中。将其缩进四个空格,它将在问题中被很好地格式化。我添加了它,但它不是一个完整的工作代码示例(可能是为了放在评论框中而被剥离)。