Java android中线程自动进入等待状态
我正在安卓系统中启动一个新线程。该线程的作用是从MediaCodec获取输出缓冲区,然后将其作为flv视频流传输到web浏览。我的问题是,在流式传输一些视频后,后台线程会自动进入等待状态。我可以在android显示器上看到这一点。以下是Android监视器中线程的日志:Java android中线程自动进入等待状态,java,android,multithreading,Java,Android,Multithreading,我正在安卓系统中启动一个新线程。该线程的作用是从MediaCodec获取输出缓冲区,然后将其作为flv视频流传输到web浏览。我的问题是,在流式传输一些视频后,后台线程会自动进入等待状态。我可以在android显示器上看到这一点。以下是Android监视器中线程的日志: at java.lang.Object.wait(Native Method) at java.lang.Thread.parkFor(Thread.java:1205) at sun.misc.Unsafe
at java.lang.Object.wait(Native Method)
at java.lang.Thread.parkFor(Thread.java:1205)
at sun.misc.Unsafe.park(Unsafe.java:325)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:813)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:973)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1281)
at java.util.concurrent.Semaphore.acquire(Semaphore.java:283)
at com.koushikdutta.async.AsyncServer.run(AsyncServer.java:190)
at in.umairkhan.screencast.cast.FlashDevice$Streamer.encode(FlashDevice.java:86)
at in.umairkhan.screencast.cast.EncoderDevice$EncoderRunnable.run(EncoderDevice.java:55)
at java.lang.Thread.run(Thread.java:841)
线程进入等待状态的可能原因是什么
编辑:
我只是以正常的方式创建线程。创建一个对象并调用该对象上的start函数。该线程的对象立即超出范围。我不可能显式地让线程进入等待状态。顺便说一句,我正在做一些关于背景线程的深入研究。我只想问线程进入等待状态的原因是什么
我一次又一次地调用这个方法:并传递runnable的对象。告诉您run方法中的第一个if条件始终为false。我认为代码的其余部分在某种程度上阻塞了代码。如果您可以获得thread对象,请尝试使用thread.setPriority()来设置较低的优先级。通过这种方式,您将发现它是否由于另一个线程阻塞而进入等待模式,根据堆栈跟踪,
com.koushikdutta.async.AsyncServer.run
正在调用java.util.concurrent.Semaphore.acquire
,它正在阻塞信号量。线程正在等待另一个线程释放信号量
Dalvik
WAIT
线程状态实际上是一个调用了Object.WAIT()
的线程。有关完整的线程状态参考,请参阅。对不起,什么是android监视器?它显示您的android设备的细节,例如线程运行的内容,你的应用程序的堆大小,是的,还有logcat和很多其他我不知道的东西。是com.koushikdutta.async.AsyncServer。运行你编写的类吗?发布一些包含线程和流读取的代码。我正在使用开源库在我的android设备上创建服务器。这是AsyncServer类: