Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.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 等待线程的开销是多少?_Java_Android_Multithreading_Threadpool_Android Volley - Fatal编程技术网

Java 等待线程的开销是多少?

Java 等待线程的开销是多少?,java,android,multithreading,threadpool,android-volley,Java,Android,Multithreading,Threadpool,Android Volley,我正在使用android中的Volley库进行Http通信。默认情况下,volley库保留了4个线程,这些线程从BlockingQueue获取http“请求”对象(请求对象包含所有用于发出http请求的详细信息,如url、http方法、要发布的数据等),并同时发出http请求。当我分析我的应用程序需求时,只有不到10%的时间我会一次使用全部4个线程,其余时间我会使用该线程池中的1到2个线程。因此,实际上有2到3个线程几乎90%的时间处于wait()模式 我的问题是, 1) 处于wait()模式的

我正在使用android中的Volley库进行Http通信。默认情况下,volley库保留了4个线程,这些线程从BlockingQueue获取http“请求”对象(请求对象包含所有用于发出http请求的详细信息,如url、http方法、要发布的数据等),并同时发出http请求。当我分析我的应用程序需求时,只有不到10%的时间我会一次使用全部4个线程,其余时间我会使用该线程池中的1到2个线程。因此,实际上有2到3个线程几乎90%的时间处于wait()模式

我的问题是, 1) 处于wait()模式的线程的开销是多少?它是否消耗大量的cpu周期?这是一个好主意,让我所有的线程等待

我假设,由于等待线程将持续检查循环中的监视器/锁(内部实现)以唤醒,因此维护等待线程可能会消耗大量cpu周期。如果我错了,请纠正我

谢谢

  • 处于wait()模式的线程的开销是多少
  • 没有。等待线程根本不消耗任何CPU周期,它只是等待被唤醒。所以不要打扰你自己

  • 我假设,由于等待的线程将在内部连续轮询监视器/锁以唤醒,因此维护等待的线程可能会消耗大量的af cpu周期。如果我错了,请纠正我
  • 那不是真的。等待线程不会对监视器/锁/任何东西进行任何轮询

    大量线程会影响性能的唯一情况是,有许多活动的线程(远远超过nr个CPU/内核),它们经常来回切换。因为CPU上下文切换也会带来一些成本。等待线程只消耗内存,不消耗CPU

    如果你想看看线程的内部实现,我不得不让你失望。像
    wait()
    /
    notify()
    这样的方法是本机的,这意味着它们的实现依赖于JVM。所以,对于热点JVM,您可以查看它的源代码(用C++/编写,带有一点汇编程序)


    但是你真的需要这个吗?为什么不信任JVM文档?

    它根本不消耗任何CPU周期,2-3不是“所有这些”,而是一个非常小的数字。你关于投票的假设是错误的。谢谢。只是想深入了解线程的内部实现。如果你能推荐一些文章,那就太好了?我想我误用了投票这个词。我的意思是检查循环中的监视器/锁。