gpt4 book ai didi

java - 获取套接字数据后调用单独的线程进行进一步处理?

转载 作者:行者123 更新时间:2023-12-01 09:19:42 25 4
gpt4 key购买 nike

目前我有这个套接字程序,它将从设备接收数据,然后执行一个漫长的过程,例如检查地理围栏和其他相关逻辑,最后将数据保存到数据库中。下面是我的代码的样子

这是启动套接字的代码 公共(public)静态无效主(字符串[]参数){

      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();
}


}

我在这里标记了///我读取数据并调用函数的其余部分等。在该运行函数中,我接收数据,验证并调用所有其他函数等,最后将数据保存到数据库中。我感觉这是一个漫长的过程。我想将其分成两部分,第一部分只是为了读取数据,然后将这串数据传递给单独的线程,因此低于我想要实现的目标是正确的。

所以在运行函数中我计划执行此操作 Thread t = new Thread(new MyRProcessing (parameter)); t.start();我不太确定这是正确的吗?我应该将 MyRProcessing 编写为单独的 .java 还是将所有内容放入一个 java 中?

public class MyRProcessing implements Runnable {
private X parameter;
public MyRProcessing (X parameter) {
this.parameter = parameter;
}

public void run() {
}
}

最佳答案

您可以找到生产者-消费者 here 的示例

这涉及multithreading的一般问题和 synchronization ,我强烈建议您在继续之前阅读这些内容。

执行您所建议的操作的最简单方法是简单地扩展 Thread 类并通过构造函数传递数据,然后在 run() 方法中处理它。在大多数情况下,这不是最好的方法,但很简单。

例如。

public class MyThread extends Thread {
private String data;
public MyThread(String data) {
this.data = data;
}

public void run() { /* process data */ }
}

然后启动线程,一旦完成,它将返回并且线程将终止。

关于java - 获取套接字数据后调用单独的线程进行进一步处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40248399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com