Heim >
Java >
javaLernprogramm >
Wie verwendet man die Thread-Klasse in Java und welche Eigenschaften hat sie?
Wie verwendet man die Thread-Klasse in Java und welche Eigenschaften hat sie?
WBOY
Freigeben: 2023-05-14 09:07:16
nach vorne
1656 Leute haben es durchsucht
Multithread-Programmierung kann in Java durchgeführt werden, und in der Java-Standardbibliothek wird eine Thread-Klasse zur Darstellung von Thread-Operationen bereitgestellt. Die Thread-Klasse kann als eine Reihe von APIs betrachtet werden, die von der Java-Standardbibliothek bereitgestellt werden, um Multithread-Programmierung zu lösen.
Die erstellte Thread-Instanz entspricht eins zu eins den Threads im Betriebssystem. Das Betriebssystem stellt eine API (C-Sprachstil) für Threads bereit, und Java kapselt sie in die Thread-Klasse. #🎜🎜 ## 🎜🎜#Thread erstellen#🎜🎜 ## 🎜🎜##Methode 1: Erben von Thread -Klasse
class MyThread extends Thread{
@Override
public void run() {
//此时只是定义处理一个线程类,在系统中总是还没有创建出 新的线程。
System.out.println("hello thread");
}
}
public class TestDemo11 {
public static void main(String[] args) {
//创建线程
Thread t = new MyThread();
//启动线程,在系统中创建出了新的线程
t.start();
}
}
Nach dem Login kopieren
#🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜#Thread Es gibt gleichzeitige Ausführungen Blockierungszustand, welcher Thread sollte dann in der nächsten Sekunde aktiviert werden? Wir können sehen, dass die Reihenfolge der in den beiden ausgeführten Threads gedruckten Protokolle unsicher ist. In jeder Runde ist nach 1 Sekunde ungewiss, ob der Thread-Thread oder der Haupt-Thread aktiviert werden soll. (Präventive Ausführung), für das Betriebssystem ist die Reihenfolge, in der Threads geplant werden, makroskopisch zufällig
Hier erklären wir die Thread.sleep()-Methode, sleep() Diese Methode ist auf ms-Ebene nicht so genau. Nach dem Aufruf dieser Methode wird der Thread gezwungen, sich in einem mittleren Blockierungszustand (Ruhezustand) zu befinden, aber wenn die Blockierungszeit abgelaufen ist, wird der Thread nicht sofort weiter auf dem Cup ausgeführt. Wenn Thread.sleep(1000), nach 1 Sekunde vergeht, endet die Blockierungszeit, aber bei 1001 ms wird der Thread möglicherweise nicht sofort ausgeführt. Möglicherweise ist der Cup im Betriebssystem mit anderen Threads beschäftigt. Möglicherweise wird der Thread bei 1006 ms ausgeführt.
Methode 2: Implementieren Sie die run()-Methode in der Runnable-Schnittstelle
class MyThread3 extends Thread{
@Override
public void run() { //定义一个线程类
while (true) {
System.out.println("hello thread");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class TestDemo13 {
public static void main(String[] args) {
Thread t = new MyThread3();
t.start();//启动t线程
while(true){
System.out.println("hello main");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Nach dem Login kopieren
Methode 3: Verwenden Sie interne Klassen
#🎜 🎜 #Methode drei ist eigentlich eine Nachbildung von Methode eins, bei der die beiden oben genannten Codes in anonyme interne Klassen umgewandelt werden.
//Runnable其实就是描述一个任务
//创建一个类,实现Runnable接口,重写Runnable类中的run方法,在run()方法中,描述的是该线程要指向的哪些任务。
class MyThread2 implements Runnable{
@Override
public void run() {
System.out.println("hello thread");
}
}
public class TestDemo12 {
public static void main(String[] args) {
//创建线程,把创建好的Runnable实例传给Thread实例
Thread t = new Thread(new MyThread2());
t.start();
}
}
public class TestDemo14 {
public static void main(String[] args) {
Thread t1 = new MyThread(){
@Override
public void run() {
System.out.println("hello thread1");
}
};
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("hello thread2");
}
});
t1.start();
t2.start();
}
}
Nach dem Login kopieren
Vorteile der Verwendung von Threads
# 🎜 🎜#Um die Vorteile von Multithreading besser darzustellen, beginnen wir hier bei 0 und erhöhen den Wert um 1, bis er 10_0000_0000 erreicht. Wir verwenden die serielle Methode und die parallele Methode und ermitteln die Zeit, in der sie den Code zum Vergleich ausführen .
public class TestDemo15 {
public static void main(String[] args) {
//其实就是使用lambad表达式代替Runnable
Thread t1 = new Thread(()->{
//()表示无参的run()方法
System.out.println("hello thread1");
});
}
}
Nach dem Login kopieren
Wir können deutlich erkennen, dass die serielle Zeit viel länger ist als die parallele Zeit, und die serielle Zeit ist fast doppelt so groß wie die parallele Zeit.
Andere Eigenschaften und Methoden der Thread-KlasseGemeinsame Konstruktionsmethoden von Thread
public class TestDemo18 {
public static void main(String[] args) {
Thread t = new Thread(()->{
System.out.println("hello thread");
});
t.start();
System.out.println(t.isDaemon());
}
}
//因为我们创建的是一个前台线程,所以返回false
public class TestDemo22 {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> public static void main(String[] args) throws InterruptedException {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> Thread t = new Thread(()->{<!--{C}%3C!%2D%2D%20%2D%2D%3E--> for(int i = 0;i<5;i++){<!--{C}%3C!%2D%2D%20%2D%2D%3E--> System.out.println("hello thread"); try {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> Thread.sleep(1000); } catch (InterruptedException e) {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> e.printStackTrace(); } } }); t.start(); t.join();//main线程调用t.join()方法,main线程就处于阻塞状态,当t线程执行完后,唤醒main线程执行后序代码 System.out.println("hello main"); }}
Nach dem Login kopieren
获取线程的引用
使用方法Thread.currentTread()就可以该线程的实例。
public class TestDemo23 {
public static void main(String[] args) {
Thread t = new Thread(){
@Override
public void run() {
//获取当前线程的引用
//System.out.println(Thread.currentThread().getName());
//因为当前使用的匿名内部类是继承自Thread类,Thread就是该匿名内部类的父类,所以可以通过this得到当前Thread的实例
System.out.println(this.getName());
}
};
t.start();
}
}
Das obige ist der detaillierte Inhalt vonWie verwendet man die Thread-Klasse in Java und welche Eigenschaften hat sie?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn