2017-11-24 12 views
0

Javaでは、メインスレッドは別のスレッドを作成して開始します。 メインスレッドがjoin()を呼び出して新しいスレッドが終了するのを待たない場合、メインスレッドが終了した後も新しいスレッドが実行を継続します。 join()を呼び出さないメインスレッドの用途はありますか? Linuxのと比較するために Javaで作成されたスレッドが終了するのを待つために `join()`を呼び出さないメインスレッドの使用法はありますか?

は、私はプログラム fork() SAの子プロセスと waitpid()を呼び出すことはありませんが、子プロセスを待つ際に子供が実行を継続しながら、仕上げが、終了することAPUEから学んだ私たちすることができます

  • (それはゾンビプロセスになる防ぐことができます)initプロセスで採用される再親、子、子供ができるように

  • は、子供ではない任意のプロセスグループのリーダーまたはプロセスのセッションを作りますsetsid()に電話してfの関連付けを解除する

(子デーモンプロセス作ることができる)、ROM、制御端末は、それが上記の2つの利点は、Javaスレッドには適用されないことが正しいですか?

ありがとうございました。

答えて

1

任意のJavaアプリケーション暗黙的joinのすべての非デーモンスレッドので、基本的に終了する前に、メインスレッドjoinすべての実行中のスレッドを行います。もう少し詳しくは、hereを参照してください。

Javaでは、プロセス/スレッドが所有/親スレッドを持つ必要はありません。すべてのスレッドは完了しているか、中断されるまで実行されて実行されます(start)。

Linuxには慣れていませんが、LinuxのシナリオはJavaのデーモンスレッドメカニズムと似ています。

1

多くの処理を行うサーブレットからhttp要求を処理し、要求のタイムアウトまでに受信データの確認を返す必要がある場合があります。

 import java.io.IOException; 
     import javax.servlet.ServletException; 
     import javax.servlet.annotation.WebServlet; 
     import javax.servlet.http.HttpServlet; 
     import javax.servlet.http.HttpServletRequest; 
     import javax.servlet.http.HttpServletResponse; 

    /** 
    * Servlet implementation class Processing 
    */ 
    @WebServlet("/Processing") 
    public class Processing extends HttpServlet { 
     private static final long serialVersionUID = 1L; 

/** 
* @see HttpServlet#HttpServlet() 
*/ 
public Processing() { 
    super(); 
    // TODO Auto-generated constructor stub 
} 

/** 
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    response.getWriter().append("Served at: ").append(request.getContextPath()); 
} 

/** 
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    new Thread(new Runnable() { 

     @Override 
     public void run() { 
      // do the heavy data processing which takes lots of time.lets assume large 
      //amount of data to be added to data base. 

     } 

    }).start(); 
    //response back to client by informing data received before request //time out on client side 
    response.getWriter().write("request receive sucessfully"); 
} 

} 
関連する問題