現在、私はデバイスからデータを受信し、ジオフェンスやその他の関連するロジックをチェックするような長いプロセスを実行し、最終的にデータをdbに保存するソケットプログラムを持っています。以下はソケットデータを取得した後、後続の処理のために別のスレッドを呼び出しますか?
これにソケット のpublic static無効メイン(文字列[] args)を起動するためのコードをどのように見えるか、私のコードである{ここで
new commS();
}
commS() {
try {
// setup the connection pool
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/****");
config.setUsername("*****");
config.setPassword("*****");
config.setMaximumPoolSize(20);
//config.setPartitionCount(1);
connectionPool = new HikariDataSource(config); // setup the connection pool
}
catch (Exception e) {
e.printStackTrace(System.out);
}
try
{
final ServerSocket serverSocketConn = new ServerSocket(8000);
while (true)
{
try
{
Socket socketConn1 = serverSocketConn.accept();
new Thread(new ConnectionHandler(socketConn1)).start();
}
catch(Exception e)
{
System.out.println("MyError:Socket Accepting has been caught in main loop."+e.toString());
e.printStackTrace(System.out);
}
}
}
catch (Exception e)
{
System.out.println("MyError:Socket Conn has been caught in main loop."+e.toString());
e.printStackTrace(System.out);
//System.exit(0);
}
は、接続ハンドラをしてソケット接続コードの残りの部分であります。
class ConnectionHandler implements Runnable {
private Socket receivedSocketConn1;
ConnectionHandler(Socket receivedSocketConn1) {
this.receivedSocketConn1=receivedSocketConn1;
}
public void run() { // etc
w = null;
BufferedReader r = null;
String message="";
try {
/// here I read for the data and call the rest of the function etc.
I would like to split into separate thread?
}
catch (SocketTimeoutException ex)
{
System.out.println("MyError:SocketTimeoutException has been caught in in the main first try");
ex.printStackTrace();
}
catch (IOException ex)
{
System.out.println("MyError:IOException has been caught in in the main first try");
ex.printStackTrace();
}
}
私は私がデータを読んで、私がデータを受信その実行機能では、関数などの残りの部分を呼び出し、すべての様々な他の機能などを検証し、呼び出し、最終的にデータを保存し、ここ///マークしていますデータベース。私はこれが長いプロセスだと感じています。私は2つのセクションを1つだけデータを読み取って、このデータの文字列を別のスレッドに渡すためにそれを壊したいので、達成しようとしているものが正しいかどうかを確認してください。
したがって、実行機能では、このスレッドを実行する予定です。t = new Thread(new MyRProcessing(parameter)); t.start();私はこれが正しいと確信していませんか?別の.javaとしてMyRProcessingを記述するか、またはすべてを1つのjavaに入れる必要がありますか?
public class MyRProcessing implements Runnable {
private X parameter;
public MyRProcessing (X parameter) {
this.parameter = parameter;
}
public void run() {
}
}
マルチスレッドチュートリアルを読む前に、いくつかのチュートリアルを読むことをお勧めします。それは複雑なテーマです。あなたが非常に多くの質問をしているので、あなたが "翼を立てよう"とすれば、あなたは頭の中にいるでしょう。そうでなければ、長期的なプロセスがあれば、生産者 - 消費者パターンから少なくとも少しは利益を得ることができるようです。 – Kayaman
はい私はこのスレッドを新しいスレッド(新しいMyRProcessing(パラメータ))を呼び出すことについて発見したいくつかのGoogleとこれを読んだ。 – user5313398
私は何をしようとしているかどうかの確認が正しいかどうかを確認する必要がありますか?実際に私の問題はシンプルですが、別の2つのスレッドを1つのスレッドとして読み込み、残りの処理を別のスレッドに渡したいので、メインスレッドが他のすべての処理でオーバーロードされないようにしたいのですか? – user5313398