访问睡眠线程资源

  • 本文关键字:资源 线程 访问 java
  • 更新时间 :
  • 英文 :


对于start_thread的线程,访问packetlist的线程启动_ activity thread(主线程)在信号量上睡觉时,它是安全的。如果不是这样,我该如何共享它们之间的资源,请注意,只会读取访问权限,而PAXETLIST不会更改。

            class A{
                Vector<packet> packetList;
                A()
                {
                    //packetList initialized here
                }
                void start_thread()
                {
                //start a thread here
                }
                void start_activity()
                {
                    while(true)
                    {
                        //possibly sleep on semephore
                        //do work
                    }
                }
            }

您可以访问向量,只要您不迭代它。如果您迭代它,则需要在该对象上握住synchronized的锁。

如果要排队"数据包"工作,我建议您使用blockingqueue,可以在其中等待添加新任务,或者使用将队列与threadpool结合在一起的executorService。

<。 <</p>

如果我正确理解,您的问题是"我正在使用信号量来同步线程访问共享数据结构" - 在这种情况下,答案是"绝对是",前提

while(true)
    {
        //acquire lock
        //do work
        //release lock
    }

,您在主线程上具有匹配结构(即您在完成任何工作之前获取锁) - 这将确保线程对向量的访问正确同步

最新更新