Короткий ответ: No. Сожалею!
В стандартном API нет такого механизма, и вы не можете использовать WeakReference для создания такой вещи, потому что ссылки относятся только к достижимости объектов, а не к активности процессора.
Но это не означает, что аналогия не является опрятной, и это не значит, что это плохая идея! Мне это нравится.
Надеюсь, вам нужно назначить низкий приоритет потока - но, как уже отмечалось в других местах, это тонкий и быстрый гнев. Низкоприоритетный поток должен уступать место более высоким приоритетам и был бы подходящим для потока while-loop. Опасности заключаются в том, что разные системы планирования OS могут привести к тому, что ваш низкоприоритетный поток будет голодать, особенно если вы не слишком осторожны, чтобы время от времени выделялось потоки с более высоким приоритетом. Вы можете найти поведение с дикой переменной на многопроцессорных процессорах или на отдельных процессорах.
Учитывая, что задача действительно прекращается при загрузке процессора ... вы можете использовать System.nanoTime()
для выполнения каждого прохода цикла, а если он превышает некоторый порог, то завершите цикл while. Мне это не очень нравится: он восприимчив к паузам GC и естественным вариациям, которые приводят к прекращению действия.
В качестве альтернативы вы можете использовать JMX для измерения фактической загрузки процессора, см. How to get percentage of CPU usage of OS from java - и прервать цикл while, если он превышает пороговое значение. У вас может быть поток мониторинга, который вызывает Thread.interrupt() для вашего рабочего, чтобы прервать любые блокирующие действия. Я могу себе представить, что вы потратили бы всю жизнь на его настройку - слишком нетерпеливы в некоторых обстоятельствах, слишком летаргичны в других; дико варьирующихся на разных размерах хостов.
И если вы хотите убить потоки, пока они на самом деле запущены ... это начинает очень тяжело. Я начинаю думать, что могут быть другие подходы, но это трудно сказать, не зная больше о более широкой проблеме, которую вы пытаетесь решить.
По-прежнему аккуратный, хотя.
Нет связи между слабыми ссылками и приоритетом нити ... – assylias
@assylias - так что мне делать? – user3840019
http://stackoverflow.com/questions/20333150/java-multithreading-thread-priority – assylias