gpt4 book ai didi

java - 如何设计一个程序来同时执行完全不同的任务?

转载 作者:行者123 更新时间:2023-11-30 06:30:48 26 4
gpt4 key购买 nike

我刚刚接触了多线程,它真的很棒。我发现自己在尝试寻找新的方法来使用它来让事情变得更好,我想我找到了一个,但我不确定如何为此设计程序。

情况是这样的。我有一个队列服务器,多个客户端使用并生成数据,但为了启动进程,我运行一个 java 程序来放置一些初始数据以供它们启动。然后我的程序完成了,我在队列服务器上有多余的容量,但实际上没有任何东西在运行。所以我想尝试做一些维护任务,运行服务,做一些低优先级的事情。不过我不确定该怎么做。如何设计一个程序来同时执行完全不同的任务?

通常我只是将我的程序包装在一个 while (true) 循环中,它只执行一个任务,我意识到我不能在同一进程中同时执行两个 while 循环(可能是嵌套的? ).为了展示一个简化的例子,我放了一堆运行可运行的代码(也许它会处理一个低优先级队列)和一个监视套接字并回复的服务(我可能想根据 cpu 使用情况添加更多)。我如何让他们一起工作?有没有更好的设计方法(我知道从长远来看,运行多个 java 进程可能更好,但现在我只是想管理一个文件,我怀疑有一种方法可以使套接字服务的优先级高于处理在文件中排队,但如果它们都在不同的文件中运行,我不知道如何降低一个而不是争夺资源)?

谢谢,如果事实证明我解释的完全错误,我会编辑这个问题。 但简而言之,我希望它为其他系统(在示例中为服务器套接字)提供服务,并且当它空闲时我希望它执行一些其他任务。

示例(如果你明白我在问什么,这段代码可能没有必要阅读):

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;


public class multipleThreads {

private ServerSocket server;
private int port = 7777;

public void ServerSocketExample() {
try {
server = new ServerSocket(port);
} catch (IOException e) {
e.printStackTrace();
}
}


public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("starting");

ServerSocketExample example = new ServerSocketExample();
example.handleConnection();

while (true) {
//monitor low low priority queue
}
}
public void handleConnection() {
System.out.println("Waiting for client message...");

//
// The server do a loop here to accept all connection initiated by the
// client application.
//
while (true) {
try {
Socket socket = server.accept();
new ConnectionHandler(socket);
} catch (IOException e) {
e.printStackTrace();
}
}
}

}

class ConnectionHandler implements Runnable {
private Socket socket;

public ConnectionHandler(Socket socket) {
this.socket = socket;

Thread t = new Thread(this);
t.start();
}

public void run() {
try
{
//
// Read a message sent by client application
//
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
String message = (String) ois.readObject();
System.out.println("Message Received: " + message);

//
// Send a response information to the client application
//
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject("Hi...");

ois.close();
oos.close();
socket.close();

System.out.println("Waiting for client message...");
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}

class MonitorQueue implements Runnable{

@Override
public void run() {
// TODO Auto-generated method stub
//do work when stuff comes in the queue

}

}

最佳答案

我强烈建议您看一下这个项目:Java Concurrent Animated。我发现这可能是让我了解 Java 中的并发概念的最佳方式:它是动画的、交互式的,您可以一次只了解一个概念并获得很好的理解。

http://sourceforge.net/projects/javaconcurrenta/

关于java - 如何设计一个程序来同时执行完全不同的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10165710/

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