Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 中断()空闲线程比等待()/notify()更好吗?_Java_Multithreading - Fatal编程技术网

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%,并且仍能正常工作。非常感谢。