В этой статье более подробно объясняется технология потоков Java с примерами. Я считаю, что она будет полезна для глубокого понимания программирования на Java. Подробности следующие:
Многие люди имеют определенное представление о потоках при изучении JAVA, и когда мы начали связываться с разработкой Android, мы действительно поняли, насколько важны потоки. В этой статье мы поделимся с вами опытом использования потоков Java. Для справки.
Прежде всего, каждый должен понимать, что потоки и процессы — это не одно и то же. Что такое процесс? Этот процесс аналогичен тому, как нам нужно выполнить файл класса, а поток — это то, что фактически требует ресурсов ЦП для запуска. Файл класса обычно имеет только один процесс, но потоков может быть много. Выполнение потоков является асинхронным методом выполнения.
1. Как запустить другой поток в основной функции:
Пример кода выглядит следующим образом:
public class Thread_one { public static void main(String [] args){ Run run = new Run(); //run.run(); //Это вызов метода, который сильно отличается от потока Thread thread = new; Thread (run); thread.start();//Запускаем поток и вызываем метод run() потока for(int i=1; i<=20; i++){ System.out.println("Значение main поток i: --------"+i); } }}класс Run реализует Runnable{ @Override public void run() { for(int i=1; i<=20; i++){ System.out .println( "Значение подпотока i: "+i } }});
2. Метод сна в потоках
Пример кода выглядит следующим образом:
public class Thread_sleep { /* * Приостановка потока*/ public static void main(String [] args) { Runone run = new Runone(); Thread thread = new Thread(run()); (5000); thread.interrupt();//Прерываем выполнение потока //thread.stop();//По сравнению с прерыванием потока, остановка является слишком грубой и не рекомендуется. дочерний поток необходимо принудительно закрыть } catch (InterruptedException e) { e.printStackTrace() } }}класс Runone реализует Runnable { @Override public void run() { for(int i=1; i<10; i++). ) { try { Thread.sleep(1000 ); System.out.println("-----"+new Date()+"-----" } catch (InterruptedException e) { return ;// Если обнаружено, что дочерний поток прерван, закройте дочерний поток напрямую} } }}
Особо следует отметить, что thread.interrupt(); может прервать выполнение потока. Это немного мягче, чем остановить, но это не лучший способ закрыть поток. Вот вам способ:
общественный класс Thread_stop {public static void main (String [] args) { Runthree run = new Runthree (); InterruptedException e) { e.printStackTrace(); } run.setStop(); }}class Runthree реализует Runnable { boolean flag; @Override public void run() { flag = true; int i = 0; { System.out.println("дочерний поток----"+(i++)); Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } public void setStop(){ флаг = ложь; } }
Позвольте мне кратко представить вам слияние и раздачу потоков:
1. Как объединить потоки , здесь вызывается метод join()
Пример кода выглядит следующим образом:
public class Thread_join { /* * Объединить потоки*/ public static void main(String [] args) { Runtwo run = new Runtwo thread = new Thread(run); try { thread.join(); ();//Объединяем потоки, это эквивалентно вызову метода} catch (InterruptedException e) { e.printStackTrace() } for(int i=0; i<10; i++){ System.out.println("main Тема: "+i); } }}Класс Runtwo реализует Runnable{ @Override public void run() { for(int i=0; i<10; i++){ System.out.println("Дочерний поток: --- -"+я); } } }
2. Как отказаться от потока Здесь вызывается метод yield() класса Thread, как показано ниже:
public class Thread_yield { /**Отказаться от процессора * @param args */ public static void main(String[] args) { Th th = new Th("aaa" for(int i = 0); ; i<=10; i++){ System.out.println("Основной поток ----"+i } }}class Th расширяет поток { Th(){} Th(String s){super(s); ;} @Override public void run() { for(int i = 0; i<=10; i++){ if(i%3!=0){ System.out.println("дочерний поток"+i }); else{ System.out.println("Sub-thread i="+i+" threadwitches"); yield();//Этот метод можно использовать только в том случае, если вы наследуете от Thread} } }}
Наконец, я хотел бы поделиться с вами вопросом приоритета потока . Код выглядит следующим образом:
public class Thread_priority { /* * Priority устанавливает приоритет потока * Приоритет потока по умолчанию равен 5; максимальный приоритет потока равен 10, а минимальный равен 0 */ public static void main(String [] args){ T1 t1 = новый T1(); T2 t2 = новый T2(); t1.start(); //t1.setPriority(Thread.NORM_PRIORITY+3); //Установим приоритет t1 t2.start(); расширяет поток { @Override public void run() { for(int i = 0; i<50; i++) { System.out.println("Thread T1-----"+i } }}class T2 расширяет); Thread { @Override public void run() { for(int i = 0; i<50; i++){ System.out.println("Thread T2"+i } } };
Я полагаю, что вы в основном поняли механизм потоков в JAVA с помощью приведенного выше кода. Надеюсь, что описание этой статьи поможет вам в углубленном изучении программирования на Java.