그래서이 그들 중 하나가 사용자로부터 정보를 얻을하도록되어 다음과 같이 다른 스레드는 사용자가 제공 한 정보와 함께 작동하도록 생각되는 경우 실행되는 두 개의 스레드 :두 스레드간에 ArrayList를 공유하고 있습니까?
public class UserRequest implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
String request;
Scanner input = new Scanner(System.in);
while(true)
{
System.out.println("Please enter request:");
request = input.nextLine();
try
{
//do something
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
그리고 두 번째 스레드 :
을public class Poller implements Runnable {
ArrayList<String> colors = new ArrayList<String>();
public void poll()
{
for(String color : colors)
{
if(color == "")
{
//do work
}
else
{
//do work
}
}
}
@Override
public void run() {
colors.add("Violet");
colors.add("Green");
colors.add("Yellow");
colors.add("Orange");
while(true)
poll();
}
}
사용자가 입력 한 내용을 UserRequest
개체에 입력하고 개체를 Poller
개체에 넣으면 새로운 값으로도 작업 할 수 있습니다. 내가 BlockingQueue
같은 몇 가지를 쳐다 보았다하지만 그들은 데이터의 공유 이외에 수행해야 할 다른 작업을 가지고 있기 때문에 스레드가 다른 기다리고 싶지 않아요. 어떻게이 일을 할 수 있습니까?
ArrayList는 스레드로부터 안전하지 않습니다. – SLaks
thread-safe 대안은 무엇일까? thread간에 그것을 공유하는 방법은 무엇입니까? –
많은 사람들이 지적했듯이, 대기열은 아마도 당신이 찾고있는 것일 것입니다. ConcurrentLinkedQueue를 과도한 잠금없이 스레드로부터 안전한 것으로 사용할 수 있습니다. – KennethJ