Java 访问休眠线程资源

Java 访问休眠线程资源,java,Java,当start_活动线程(主线程)在信号量上睡眠时,来自start_线程的线程访问packetList是否安全。如果没有,那么我如何才能在他们之间共享资源,请注意,访问权限将仅被读取,并且不会更改打包列表 class A{ Vector<packet> packetList; A() { //packetList initial

当start_活动线程(主线程)在信号量上睡眠时,来自start_线程的线程访问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
                    }
                }
            }
A类{
向量包列表;
()
{
//这里初始化了packetList
}
无效开始线程()
{
//在这里开始一个线程
}
无效开始_活动()
{
while(true)
{
//可能睡在semephore
//工作
}
}
}

只要不在向量上迭代,就可以访问该向量。如果对其进行迭代,则需要在该对象上使用
synchronized
保持一个锁


如果您想将工作的“数据包”排队,我建议您考虑使用BlockingQueue,在那里您可以等待添加新任务,或者使用ExecutorService,它将队列与线程池相结合。

如果我理解正确,您的问题是“我正在使用信号量将线程访问同步到共享数据结构”-在这种情况下,答案为“肯定是”,前提是您对向量的访问完全符合规定,即:

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

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

这是可能的,但必须同步对列表的访问。您必须考虑这样一种情况,即有人在线程唤醒时读取向量。@JakubZaverka当主线程在信号量上睡眠时,另一个线程可以访问数组吗?基本上,我希望两个线程都可以按需访问数组,而不管哪个线程正在睡眠,我怎么做?