-
多线程sleep与interrupt性能30
一个管理线程ManagerThread,多个业务线程BusinessThread
管理线程获得数据后,需要交给业务线程处理,平时业务线程都是sleep状态,由管理线程决定唤起哪几个业务线程。
两种方式可用:
1.BusinessThread一直都sleep,直至ManagerThread调用interrupt中断,执行完业务后继续sleep;
2.BusinessThread加个wakeup的标识属性,循环sleep(1000),每个循环间隙去判断自身标识属性,来确定是否执行业务。
由于业务线程可能要求比较多,所以需要评估一下性能,
我觉得1用的资源比较少,但2比较灵活,但是不确定,1和2哪种更合理。
问题补充:以前用过线程池,但是创建与释放过于频繁,一段时间后容易出现out of memory之类的异常。当然跟jvm参数配置不当也有关,但是线程稳定的话,异常几率大幅减少。2013年7月09日 09:40
6个答案 按时间排序 按投票排序
-
性能上肯定是第一种模型性能好,
但不推荐用 sleep interrupt ,java 的 wait 和 notify 就是可以,用来减少 cpu 轮询.
附上一个最最简单的实现:public class MainTest { public static Object lock = new Object(); public static void main(String[] args) throws InterruptedException { ThreadClass t1 = new ThreadClass(); ThreadClass t2 = new ThreadClass(); ThreadClass t3 = new ThreadClass(); t1.start(); t2.start(); t3.start(); synchronized (lock) { lock.notifyAll(); } } public static class ThreadClass extends Thread { @Override public void run() { System.out.println(this.getId() + ",run"); synchronized (lock) { try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } // TODO 获取任务对象,跳出synchronized 模块,否则继续wait } } } }
不过猜测楼主的业务是:
要为每个业务线程都加一个锁对象,当这个业务线程应该开始去执行的时候,就去 调用这个业务线程使用的锁对象的 notify ,就可以了.
2013年7月11日 10:14
-
package thread.iteye;
import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;
public class ThreadTest {
public static void main(String[] args) {
Queue<Object> tasks = new ArrayBlockingQueue<Object>(10);
ManagerThread mt = new ManagerThread(tasks);
BusinessThread bt = new BusinessThread(tasks);
BusinessThread bt1 = new BusinessThread(tasks);
mt.start();
bt.start();
bt1.start();
}
}
class ManagerThread extends Thread{
private Queue<Object> tasks;
public ManagerThread(Queue<Object> tasks){
this.tasks = tasks;
}
public void run(){
while(true){
addTask();
if(!tasks.isEmpty()){
synchronized(tasks){tasks.notify();}//唤醒消费者
}
}
}
public void addTask(){
if(tasks.size()<10){
tasks.add("aaa");
}
}
}
class BusinessThread extends Thread{
private Queue<Object> tasks;
public BusinessThread(Queue<Object> tasks){
this.tasks = tasks;
}
public void run(){
while(true){
Object task = tasks.poll();
//some code do task
if(task!=null){
execute(task);
try {
synchronized(tasks){tasks.wait();}//等待下次任务
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public void execute(Object task){
try {
Thread.sleep(10000);//执行任务需要一定时间
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" execute aaa");
}
}2013年7月10日 11:47
-
建议用java.util.concurrent里面的类来进行多线程管理,维护一个线程池,需要的时候创建多个线程来完成任务,任务执行完毕线程销毁,可以少去维护线程的开销。
2013年7月09日 11:09
相关推荐
3. 多线程同步与通信: 在多线程环境下,可能会出现数据竞争问题,为了解决这个问题,Java提供了多种同步机制,如synchronized关键字、wait/notify机制、Lock锁(ReentrantLock)等。synchronized用于控制对共享...
在Java多线程编程中,线程控制是至关重要的技术之一。有时我们需要在特定条件下停止某个线程的执行,或者中断正在等待的线程。Java提供了多种方式来实现这些功能,其中`interrupt`和`stop`是最常用的方法。本文将...
挂起线程通常通过调用`sleep()`或`wait()`方法实现,恢复线程可能通过`notify()`或`notifyAll()`唤醒,终止线程则可以通过`interrupt()`方法发送中断请求,但线程本身需要检查`isInterrupted()`或`...
JAVA 多线程 interrupt() 和线程终止方式 JAVA 多线程中,interrupt() 和线程终止方式是两个非常重要的概念。本文将深入分析 JAVA 多线程中 interrupt() 和线程终止方式的相关知识。 一、interrupt() 介绍 ...
在现代计算机系统中,多线程是实现并发处理的关键技术,尤其在服务器端应用和高性能计算中不可或缺。 首先,我们要理解线程的概念。线程是程序执行的最小单元,一个进程中可以包含多个线程,它们共享进程的资源,但...
### 多线程使用操作大全 #### 知识点概览 本文主要围绕多线程在Java中的使用展开,深入探讨了线程控制的基本方法及其应用场景,并提供了具体的示例代码来帮助理解。主要包括线程的生命状态检查、优先级管理、线程间...
在编程领域,多线程是实现并发执行任务的重要机制,特别是在服务器端开发和高并发场景中。本示例提供了一个简单的多线程应用,旨在帮助...在深入学习多线程时,还要关注线程安全、性能优化以及异常处理等方面的知识。
"面试中多线程问题" 多线程是 Java 编程中一个重要的概念,掌握多线程可以帮助开发者更好地编写高效、稳定的程序。以下是面试中常见的多线程问题和解释: 1. 实现多线程的几种方法? Java 中有两种方式可以实现多...
在编程领域,多线程资源共享是并发编程中的一个重要主题,特别是在Java等支持多线程的编程语言中。本文将深入探讨多线程环境下如何管理和控制资源共享,主要关注`synchronized`关键字、`Runnable`接口以及`Thread`类...
线程的基本概念、线程类、任务类、线程优先级、sleep()方法(休眠)、yield()方法(礼让)、join方法(合并)、interrupt()方法(中断),线程的生命周期 线程 与 进程 的关系:**有一个进程中至少包含一个线程 **...
8. **调试与性能分析** - 使用Java的`ThreadMXBean`监控线程状态,`VisualVM`或`JProfiler`工具进行性能分析,找出瓶颈并优化。 9. **并发设计模式** - 生产者消费者模式、读写锁、双检锁等并发设计模式在游戏...
Java中的多线程是编程领域中的重要概念,尤其在服务器端和高性能应用中不可或缺。它允许程序同时执行多个任务,从而提高系统效率和响应性。本文将深入探讨Java多线程的实例,帮助读者理解其工作原理和实际应用。 ...
Java线程Thread之interrupt中断机制是Java多线程编程中的一种重要机制。通过调用Thread.interrupt()方法,可以设置线程的中断状态位,线程会不时地检测这个中断标示位,以判断线程是否应该被中断。interrupt机制并...
Java多线程是Java编程中的一个...以上只是Java多线程基础知识的一部分,深入学习还包括线程池的配置与优化、线程安全的设计模式、并发工具类的使用等。理解和掌握这些知识点对于编写高效、稳定的多线程程序至关重要。
Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。本文将深入探讨Java多线程的相关知识点,包括线程的创建、线程的状态、同步机制以及线程安全问题。 1. **线程的创建*...
总之,《多线程编程实战指南-核心篇》是一本全面解析Java多线程编程的书籍,通过学习,开发者不仅可以掌握多线程编程的基本原理,还能学会如何在实际项目中应用这些知识,提升程序的并发性能和稳定性。对于有一定...
Java多线程是Java编程中不可或缺的一部分,它允许程序同时执行多个任务,从而提高应用程序的效率和响应性。多线程使得程序能够并发处理多个任务,例如在一个程序中同时进行数据处理、用户界面更新和网络通信。 在...
本文将深入浅出地解析多线程的概念、实现方式以及相关的管理与同步策略。 首先,多线程是指在一个应用程序中同时运行多个线程,这使得程序能够并行处理不同的任务,提高系统的效率和响应速度。在Java中,线程是通过...
总结来说,`interrupt()` 和 `sleep()` 在Java多线程编程中扮演着至关重要的角色。它们提供了对线程的灵活控制,使得开发者可以实现复杂的并发策略。同时,理解并正确使用这些方法,有助于避免线程阻塞和资源浪费,...
总之,Java多线程是Java程序员必须掌握的核心技能之一,它涉及到程序的并发性、性能优化以及资源管理等多个方面。通过"java_Thread.txt"这样的实例学习,可以帮助我们更好地理解和应用Java的多线程特性,提升我们的...