访问休眠线程资源

时间:2012-11-07 09:25:24

标签: java

来自start_thread的线程是安全的,当start_activity线程(主线程)在信号量上休眠时访问packetList。如果没有,那么我如何在它们之间共享资源,请注意只能读取访问权限并且不会更改packetList。

            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
                    }
                }
            }

2 个答案:

答案 0 :(得分:0)

如果您不迭代它,您可以访问Vector。如果您对其进行迭代,则需要在该对象上保持synchronized锁定。

如果你想对“数据包”进行排队,我建议你看一下使用BlockingQueue,你可以等待添加新任务,或者使用一个将Queue和ThreadPool结合起来的ExecutorService。

答案 1 :(得分:0)

如果我理解正确,你的问题就是“我正在使用信号量来同步对共享数据结构的线程访问” - 在这种情况下答案是“肯定是”,只要你对Vector的访问权限是准确的如上所述,即:

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

并且你在主线程上有一个匹配的结构(即你在做任何工作之前获得了锁) - 这将确保线程对Vector的访问被正确同步