当前位置:实例文章 » JAVA Web实例» [文章]2.多线程-初阶(上)

2.多线程-初阶(上)

发布人:shili8 发布时间:2024-11-17 18:20 阅读次数:0

**多线程-初阶(上)**在计算机编程中,多线程是指一个程序可以同时执行多个线程的功能。每个线程都有自己的执行栈和局部变量,线程之间共享同一块内存空间。在 Java 中,多线程使用 Thread 类来实现。

**为什么需要多线程**

在单线程环境下,当一个线程进行长时间的计算或等待时,其他线程将被阻塞。这种情况下,程序的性能和响应速度会大大降低。通过使用多线程,可以让程序同时执行多个任务,从而提高整体的性能和响应速度。

**创建线程**

在 Java 中,创建一个线程需要继承 Thread 类或实现 Runnable 接口。

### 继承 Thread 类

javapublic class MyThread extends Thread {
 @Override public void run() {
 System.out.println("Hello, World!");
 }

 public static void main(String[] args) {
 MyThread thread = new MyThread();
 thread.start(); // 启动线程 }
}


### 实现 Runnable 接口
javapublic class MyRunnable implements Runnable {
 @Override public void run() {
 System.out.println("Hello, World!");
 }

 public static void main(String[] args) {
 Thread thread = new Thread(new MyRunnable());
 thread.start(); // 启动线程 }
}


**线程的状态**

一个线程可以处于以下几种状态:

* **NEW**:新创建的线程,尚未启动。
* **RUNNABLE**:线程正在执行或准备执行。
* **BLOCKED**:线程被阻塞等待某个资源。
* **WAITING**:线程正在等待另一个线程完成特定操作。
* **TIMED_WAITING**:线程正在等待另一个线程完成特定操作,超时时间为指定的毫秒数。
* **TERMINATED**:线程已经结束。

javapublic class ThreadStatus {
 public static void main(String[] args) throws InterruptedException {
 Thread thread = new Thread(() -> {
 System.out.println("NEW");
 try {
 Thread.sleep(1000);
 } catch (InterruptedException e) {
 Thread.currentThread().interrupt();
 }
 System.out.println("RUNNABLE");
 try {
 Thread.sleep(1000);
 } catch (InterruptedException e) {
 Thread.currentThread().interrupt();
 }
 System.out.println("BLOCKED");
 try {
 Thread.sleep(1000);
 } catch (InterruptedException e) {
 Thread.currentThread().interrupt();
 }
 System.out.println("WAITING");
 try {
 Thread.sleep(1000);
 } catch (InterruptedException e) {
 Thread.currentThread().interrupt();
 }
 System.out.println("TIMED_WAITING");
 try {
 Thread.sleep(1000);
 } catch (InterruptedException e) {
 Thread.currentThread().interrupt();
 }
 System.out.println("TERMINATED");
 });
 thread.start();
 while (!thread.isAlive()) {}
 System.out.println(thread.getState());
 }
}


**线程的优先级**

每个线程都有一个优先级,范围从1 到10。优先级越高,线程执行的频率越快。

javapublic class ThreadPriority {
 public static void main(String[] args) throws InterruptedException {
 Thread thread = new Thread(() -> {
 for (int i =0; i < 10000000; i++) {}
 });
 thread.setPriority(Thread.MAX_PRIORITY);
 thread.start();
 while (!thread.isAlive()) {}
 System.out.println(thread.getPriority());
 }
}


**线程的同步**

多个线程共享同一块内存空间时,需要使用同步机制来避免数据竞争。

javapublic class ThreadSync {
 private static int count =0;

 public static void main(String[] args) throws InterruptedException {
 Thread thread1 = new Thread(() -> {
 for (int i =0; i < 10000000; i++) {
 synchronized (ThreadSync.class) {
 count++;
 }
 }
 });
 Thread thread2 = new Thread(() -> {
 for (int i =0; i < 10000000; i++) {
 synchronized (ThreadSync.class) {
 count--;
 }
 }
 });
 thread1.start();
 thread2.start();
 while (!thread1.isAlive() || !thread2.isAlive()) {}
 System.out.println(count);
 }
}


**线程的通信**

多个线程之间需要进行通信来完成特定任务。

javapublic class ThreadComm {
 private static int count =0;

 public static void main(String[] args) throws InterruptedException {
 Thread thread1 = new Thread(() -> {
 for (int i =0; i < 10000000; i++) {
 synchronized (ThreadComm.class) {
 if (count ==0) {
 System.out.println("Thread1: count is0");
 }
 count++;
 }
 }
 });
 Thread thread2 = new Thread(() -> {
 for (int i =0; i < 10000000; i++) {
 synchronized (ThreadComm.class) {
 if (count ==10000000) {
 System.out.println("Thread2: count is10000000");
 }
 count--;
 }
 }
 });
 thread1.start();
 thread2.start();
 while (!thread1.isAlive() || !thread2.isAlive()) {}
 System.out.println(count);
 }
}


**线程的join**

多个线程之间需要进行 join 操作来等待特定线程完成。

javapublic class ThreadJoin {
 public static void main(String[] args) throws InterruptedException {
 Thread thread = new Thread(() -> {
 for (int i =0; i < 10000000; i++) {}
 });
 thread.start();
 thread.join(); // 等待线程完成 System.out.println("Thread has finished");
 }
}


**线程的interrupt**

多个线程之间需要进行 interrupt 操作来中断特定线程。

javapublic class ThreadInterrupt {
 public static void main(String[] args) throws InterruptedException {
 Thread thread = new Thread(() -> {
 for (int i =0; i < 10000000; i++) {}
 });
 thread.start();
 thread.interrupt(); // 中断线程 System.out.println("Thread has been interrupted");
 }
}


**线程的sleep**

多个线程之间需要进行 sleep 操作来暂停特定线程。

javapublic class ThreadSleep {
 public static void main(String[] args) throws InterruptedException {
 Thread thread = new Thread(() -> {
 for (int i =0; i < 10000000; i++) {}
 });
 thread.start();
 try {
 Thread.sleep(1000); // 暂停线程 } catch (InterruptedException e) {
 Thread.currentThread().interrupt();
 }
 System.out.println("Thread has slept");
 }
}


**线程的yield**

多个线程之间需要进行 yield 操作来让出 CPU 时间片。

javapublic class ThreadYield {
 public static void main(String[] args) throws InterruptedException {
 Thread thread = new Thread(() -> {
 for (int i =0; i < 10000000; i++) {}
 });
 thread.start();
 Thread.yield(); // 让出 CPU 时间片 System.out.println("Thread has yielded");
 }
}


**线程的run**

多个线程之间需要进行 run 操作来执行特定任务。

javapublic class ThreadRun {
 public static void main(String[] args) throws InterruptedException {
 Thread thread = new Thread(() -> {
 for (int i =0; i < 10000000; i++) {}
 });
 thread.start();
 thread.run(); // 执行线程任务 System.out.println("Thread has run");
 }
}


**线程的start**

多个线程之间需要进行 start 操作来启动特定线程。

javapublic class ThreadStart {
 public static void main(String[] args) throws InterruptedException {
 Thread thread = new Thread(() -> {
 for (int i =0; i < 10000000; i++) {}
 });
 thread.start(); // 启动线程 System.out.println("Thread has started");
 }
}


**线程的stop**

多个线程之间需要进行 stop 操作来停止特定线程。

javapublic class ThreadStop {
 public static void main(String[] args) throws InterruptedException {
 Thread thread = new Thread(() -> {
 for (int i =0; i < 10000000; i++) {}
 });
 thread.start();
 thread.stop(); // 停止线程 System.out.println("Thread has stopped");
 }
}


**线程的destroy**

多个线程之间需要进行 destroy 操作来销毁特定线程。

java

相关标签:java开发语言
其他信息

其他资源

Top