一个不停运行的线程
A thread that runs without stopping
是否可以在 java 中创建一个始终在后台运行的线程?问题是应用程序实例有时会因 OutOfMemoryException 而崩溃。因此,并行启动多个实例。每个实例都做一些工作:它根据用户的请求将一些东西保存到数据库中。应该持续工作的流将查看数据库并以某种方式处理来自它的信息。
sheduler 很可能无法工作,因为线程必须 运行 不断地等待信号开始工作。
首先,我建议您调查并解决 OutOfMemoryException,因为这样可以更好地避免这些情况。您可以实例化一个等待请求的线程,执行一个请求,然后 return 等待另一个请求。线程的实现是这样的:
/** Squares integers. */
public class Squarer {
private final BlockingQueue<Integer> in;
private final BlockingQueue<SquareResult> out;
public Squarer(BlockingQueue<Integer> requests,
BlockingQueue<SquareResult> replies) {
this.in = requests;
this.out = replies;
}
public void start() {
new Thread(new Runnable() {
public void run() {
while (true) {
try {
// block until a request arrives
int x = in.take();
// compute the answer and send it back
int y = x * x;
out.put(new SquareResult(x, y));
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
}
}).start();
}
}
对于调用方方法:
public static void main(String[] args) {
BlockingQueue<Integer> requests = new LinkedBlockingQueue<>();
BlockingQueue<SquareResult> replies = new LinkedBlockingQueue<>();
Squarer squarer = new Squarer(requests, replies);
squarer.start();
try {
// make a request
requests.put(42);
// ... maybe do something concurrently ...
// read the reply
System.out.println(replies.take());
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
要了解更多信息,您可以开始阅读我找到的 here 为您提供示例的 post。
你基本上需要一个无限的 运行 线程和一些控制。
我发现这个答案是最简单的,它可以满足您的需要。
是否可以在 java 中创建一个始终在后台运行的线程?问题是应用程序实例有时会因 OutOfMemoryException 而崩溃。因此,并行启动多个实例。每个实例都做一些工作:它根据用户的请求将一些东西保存到数据库中。应该持续工作的流将查看数据库并以某种方式处理来自它的信息。
sheduler 很可能无法工作,因为线程必须 运行 不断地等待信号开始工作。
首先,我建议您调查并解决 OutOfMemoryException,因为这样可以更好地避免这些情况。您可以实例化一个等待请求的线程,执行一个请求,然后 return 等待另一个请求。线程的实现是这样的:
/** Squares integers. */
public class Squarer {
private final BlockingQueue<Integer> in;
private final BlockingQueue<SquareResult> out;
public Squarer(BlockingQueue<Integer> requests,
BlockingQueue<SquareResult> replies) {
this.in = requests;
this.out = replies;
}
public void start() {
new Thread(new Runnable() {
public void run() {
while (true) {
try {
// block until a request arrives
int x = in.take();
// compute the answer and send it back
int y = x * x;
out.put(new SquareResult(x, y));
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
}
}).start();
}
}
对于调用方方法:
public static void main(String[] args) {
BlockingQueue<Integer> requests = new LinkedBlockingQueue<>();
BlockingQueue<SquareResult> replies = new LinkedBlockingQueue<>();
Squarer squarer = new Squarer(requests, replies);
squarer.start();
try {
// make a request
requests.put(42);
// ... maybe do something concurrently ...
// read the reply
System.out.println(replies.take());
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
要了解更多信息,您可以开始阅读我找到的 here 为您提供示例的 post。
你基本上需要一个无限的 运行 线程和一些控制。
我发现这个答案是最简单的,它可以满足您的需要。