멀티 스레드 프로그래밍은 Java에서 수행할 수 있습니다. 스레드 작업을 나타내기 위해 Java 표준 라이브러리에 Thread 클래스가 제공됩니다. Thread 클래스는 멀티스레드 프로그래밍을 해결하기 위해 Java 표준 라이브러리에서 제공하는 API 집합으로 간주할 수 있습니다. 생성된 Thread 인스턴스는 운영 체제의 스레드와 일대일 대응을 갖습니다. 운영 체제는 스레드에 대한 API(C 언어 스타일)를 제공하고 Java는 이를 Thread 클래스에 캡슐화합니다.
스레드 만들기
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(); } }스레드가 동시에 실행됩니다.
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();
}
}
}
}
1s当执行一个线程中的代码之后
실행된 두 스레드에 인쇄된 로그의 순서가 불확실한 것을 볼 수 있습니다. 각 라운드에서 1초 이후에는 스레드 스레드를 깨울지 메인 스레드를 깨울지 여부가 불확실합니다. (선제 실행) 운영 체제의 경우 스레드가 예약되는 순서는 거시적으로 무작위입니다
방법 2: Runnable 인터페이스에서 run() 메서드 구현
//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();
}
}
방법 4: Lambmd 표현식 사용
public class TestDemo15 { public static void main(String[] args) { //其实就是使用lambad表达式代替Runnable Thread t1 = new Thread(()->{ //()表示无参的run()方法 System.out.println("hello thread1"); }); } }
public class TestDemo16 { public static void func1() throws InterruptedException { long big = System.currentTimeMillis(); //串行执行 Thread t = new Thread(()->{ long a = 0; for(long i = 0;i<10_0000_0000;i++){ a++; } }); t.start(); t.join(); long end = System.currentTimeMillis(); System.out.println("串行消耗时间:" + (end - big) + "ms"); } public static void func2() throws InterruptedException { long big = System.currentTimeMillis(); Thread t1 = new Thread(()->{ long b = 0; for(long i = 0;i< 10_0000_0000 / 2;i++){ b++; } }); t1.start(); Thread t2 = new Thread(()->{ long c = 0; for(long i = 0;i<10_0000_0000/ 2;i++){ c++; } }); t2.start(); t1.join(); t2.join(); long end = System.currentTimeMillis(); System.out.println("并行执行消耗时间:" + (end - big) + "ms"); } public static void main(String[] args) throws InterruptedException { func1();//串行执行 func2();//并行执行 } }
직렬 시간이 병렬 시간보다 훨씬 길다는 것을 분명히 알 수 있습니다.
Thread 클래스의 기타 속성 및 메서드
메서드 가져오기 | |
---|---|
getId() | |
getName() | |
getState() | |
getPriority() | |
Daemon() | |
isAlive() | |
중단됨() |
위 내용은 Java에서 Thread 클래스를 사용하는 방법과 해당 속성은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!