Java 中断()空闲线程比等待()/notify()更好吗?
我有一个Java 中断()空闲线程比等待()/notify()更好吗?,java,multithreading,Java,Multithreading,我有一个管理器,它管理两个文件系统(我自己的抽象)。有可能其中一个文件系统在一段时间内没有接收到数据,所以我想将其闲置。每当管理器最终接收到数据时,它都应该唤醒相应的空闲文件系统。现在我正在使用wait()和notify()并得到我想要的结果 然而,闲置文件系统的全部目的是消耗更少的资源。我想知道是否最好只中断()线程,然后在激活文件系统时创建一个新的线程(可能需要十分钟或更长时间才能收到新数据)?等待难道不会占用资源吗 这是我的可运行的设置 public class FileSystem im
管理器
,它管理两个文件系统
(我自己的抽象)。有可能其中一个文件系统
在一段时间内没有接收到数据,所以我想将其闲置。每当管理器最终接收到数据时,它都应该唤醒相应的空闲文件系统
。现在我正在使用wait()
和notify()
并得到我想要的结果
然而,闲置文件系统的全部目的是消耗更少的资源。我想知道是否最好只中断()
线程
,然后在激活文件系统
时创建一个新的线程(可能需要十分钟或更长时间才能收到新数据)?等待难道不会占用资源吗
这是我的可运行的设置
public class FileSystem implements Runnable
{
public FileSystem()
{
// do stuff
startTimer()
}
@Override
public void run()
{
while (!Thread.currentThread().isInterrupted())
{
// do stuff
}
}
//public void startTimer()
//{
// new Thread(new Runnable()
// {
// @Override
// public void run()
// {
// // do something
// }
// }).start();
//}
// other methods
}
视情况而定。若读操作创建了大量的资源,并且发生得非常频繁,那个么最好等待文件。但是,如果读取线程很轻并且空闲很多,那么最好创建一个新线程。如果文件系统在中断传递的那一刻不是空闲的,那么应该怎么办?它完成它正在做的事情,然后空闲。我有一个包装器方法,确保中断不会中断线程
,然后在需要时创建一个新的线程
。除非需要线程
,否则不会执行任何操作。使用Runnable
意味着我所有的数据都还在内存中,所以启动时间可以忽略不计。我使用中断成功地将CPU使用率降低了约10-35%,并且仍能正常工作。非常感谢。