Даже если бы у вас был доступ к этим темам, что бы вы сделали с этими знаниями? Как бы вы сказали, что этот поток делает в настоящее время?
Если у вас есть служба, доступ к которой можно получить из нескольких мест, но вы хотите гарантировать, что эта служба будет использовать только один поток, вы можете настроить рабочую очередь следующим образом:
public class FileService
{
private final Queue workQueue = new ArrayBlockingQueue(100/*capacity*/);
public FileService()
{
new Thread()
{
public void run()
{
while(true)
{
Object request = workQueue.take(); // blocks until available
doSomeWork(request);
}
}
}.start();
}
public boolean addTask(Object param)
{
return workQueue.offer(param); // return true on success
}
}
Здесь ArrayBlockingQueue решает все проблемы безопасности потоков. addTask () можно безопасно вызывать из любого другого потока; это просто добавит «задание» в workQueue. Другой внутренний поток будет постоянно читать из workQueue и выполнять какую-либо операцию, если есть работа, в противном случае он будет тихо ждать.