Русские Блоги
Метод start () в классе Thread сообщает ЦП, что этот поток готов к запуску, а затем ожидает выделения ресурсов ЦП для запуска этого потока.
Может использоваться в Java isAlive() Метод проверки, запущен ли поток
class MyThread implements Runnable// Реализуем интерфейс Runnable public void run()// Переопределить метод run () в классе Thread for(int i=0;i3;i++) System.out.println(Thread.currentThread().getName() + "Беги ->" + i);// Получаем имя текущего потока > > > public class Root public static void main(String[] args) MyThread my = new MyThread();// Определение объекта подкласса Runnable Thread t = new Thread(my,"Нить");// Создание экземпляра объекта Thread System.out.println("Перед тем, как поток начнет выполнение ->" + t.isAlive());// Определяем, начинать ли t.start();// Запускаем поток System.out.println("После того, как поток начнет выполняться ->" + t.isAlive());// Определяем, начинать ли for (int i=0;i3;i++)// вывод цикла 3 раза System.out.println("главный ход ->" + i);//Вывод > System.out.println(«После выполнения кода ->» + t.isAlive());// Последующий вывод неопределен > >
Приведенный выше результат вывода является неопределенным. Возможно, поток больше не выживет в конце, но он может продолжать выживать, в зависимости от того, какой поток завершит выполнение первым.
Из-за неопределенности работы потока сначала может быть выполнен основной поток, тогда другие потоки не будут затронуты каким-либо образом и не завершатся концом основного потока.
Интеллектуальная рекомендация
Фабричный метод режим
Значимость режима фабрики метода заключается в определении заводского интерфейса, который создает объект продукта, и задержать фактическую работу создания на подкласс. Основная категория фабрики больш.
Эта функция указателя/постоянной, нормальный объект
Этот указатель представляет Переменные элемента объекта в классе и функции элемента хранятся отдельно. Sizeof (пустой класс) = 1. Кроме того, вопрос о выравнивании байта участвует в примере. INT также.
JavaScript садоводство
Тип преобразования JavaScript этоСлабый типЯзык, так будетЛюбыеГде возможноТип преобразования。 Советы ES5:С0Числовые литералы в начале будут интерпретироваться как восьмеричные цифры. В строгом режиме.
Чтение заметок «Microsoft Sql server 2008 Internals» — глава 6 «Индексы и управление» (1)
Директория индекса «Microsoft Sql server 2008 Internals»: «Microsoft Sql server 2008 Internals», читающий указатель к каталогу заметок В пятой главе я в основном изучал внутрен.
Как в Java определить, запущен ли поток?
Он возвращает true, если поток все еще жив, и false, если поток мертв. Это не статично. Вам нужна ссылка на объект класса Thread.
Еще один совет: если вы проверяете его статус, чтобы заставить основной поток ждать, пока новый поток все еще работает, вы можете использовать метод join (). Так удобнее.
Я думаю, вы можете использовать GetState () ; Он может возвращать точное состояние потока.
Проверьте статус потока, позвонив Thread.isAlive .
Thread.isAlive() возвращает истину, если поток был запущен (возможно, еще не запущен), но еще не завершил свой метод выполнения.
Thread.getState() возвращает точное состояние потока.
Класс перечисления Thread.State и новый API getState () предоставляются для запроса состояния выполнения потока.
В определенный момент времени поток может находиться только в одном состоянии. Эти состояния представляют собой состояния виртуальной машины, которые не отражают состояния потоков операционной системы [ NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED ].
- getState ()jdk5 — public State getState() «Возвращает состояние this потока. Этот метод предназначен для использования при мониторинге состояния системы, а не для управления синхронизацией.
- isAlive () — public final native boolean isAlive(); «Возвращает истину, если поток, из которого он вызывается, все еще жив, иначе возвращает ложь . Поток жив, если он был запущен и еще не умер.
package java.lang; public class Thread implements Runnable < public final native boolean isAlive(); // Java thread status value zero corresponds to state "NEW" - 'not yet started'. private volatile int threadStatus = 0; public enum State < NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; >public State getState() < return sun.misc.VM.toThreadState(threadStatus); > > package sun.misc; public class VM < // . public static Thread.State toThreadState(int threadStatus) < if ((threadStatus & JVMTI_THREAD_STATE_RUNNABLE) != 0) < return Thread.State.RUNNABLE; > else if ((threadStatus & JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER) != 0) < return Thread.State.BLOCKED; > else if ((threadStatus & JVMTI_THREAD_STATE_WAITING_INDEFINITELY) != 0) < return Thread.State.WAITING; > else if ((threadStatus & JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT) != 0) < return Thread.State.TIMED_WAITING; > else if ((threadStatus & JVMTI_THREAD_STATE_TERMINATED) != 0) < return Thread.State.TERMINATED; > else if ((threadStatus & JVMTI_THREAD_STATE_ALIVE) == 0) < return Thread.State.NEW; > else < return Thread.State.RUNNABLE; > > >
Пример с java.util.concurrent.CountDownLatch параллельным выполнением нескольких потоков, после завершения всех потоков выполняется основной поток. (пока параллельные потоки не завершат свою задачу, основной поток будет заблокирован.)
public class MainThread_Wait_TillWorkerThreadsComplete < public static void main(String[] args) throws InterruptedException < System.out.println("Main Thread Started. "); // countDown() should be called 4 time to make count 0. So, that await() will release the blocking threads. int latchGroupCount = 4; CountDownLatch latch = new CountDownLatch(latchGroupCount); new Thread(new Task(2, latch), "T1").start(); new Thread(new Task(7, latch), "T2").start(); new Thread(new Task(5, latch), "T3").start(); new Thread(new Task(4, latch), "T4").start(); //latch.countDown(); // Decrements the count of the latch group. // await() method block until the current count reaches to zero latch.await(); // block until latchGroupCount is 0 System.out.println("Main Thread completed."); > > class Task extends Thread < CountDownLatch latch; int iterations = 10; public Task(int iterations, CountDownLatch latch) < this.iterations = iterations; this.latch = latch; > @Override public void run() < String threadName = Thread.currentThread().getName(); System.out.println(threadName + " : Started Task. "); for (int i = 0; i < iterations; i++) < System.out.println(threadName + " : "+ i); sleep(1); > System.out.println(threadName + " : Completed Task"); latch.countDown(); // Decrements the count of the latch, > public void sleep(int sec) < try < Thread.sleep(1000 * sec); > catch (InterruptedException e) < e.printStackTrace(); >> >