Я пишу программу Java, включающую многопоточный пул работников Process
es. Каждый экземпляр класса Process
должен иметь возможность генерировать один дополнительный поток, чтобы выполнить некоторую работу. Но поток должен порождать сам экземпляр и никто другой. К сожалению, Runnable.run
является «общедоступным», поэтому я не могу навязывать это без каких-либо трюков.Java: приватный вызов «run» в классе «Runnable»
Вот трюк, который я планирую использовать:
- Реализовать
Runnable
вProcess
- Записать это в реализации:
Код:
class Process implements Runnable {
private boolean threadkey = false;
public void run() {
synchronized(threadkey) {
// is someone wrongly calling 'run'?
if(!threadkey)
return;
/* switch off threadkey to make sure
it cannot be called meaningfully again */
threadkey = false;
}
/* continue processing
*
*/
return;
}
Конечно, теперь все, что мне нужно сделать, когда я хочу run
законно заключается в том, чтобы включить «threadkey» (который является приватным) перед выполнением вызова.
Элегантный? Или нет? Или есть лучший способ? Или мне просто не нужно сдерживать это и писать аккуратный небольшой комментарий, объясняющий НЕ называть «run»?
Неужели люди даже называют «run» из класса, который должен выполнять «бег»?