线程八大核心 + Java并发原理
1. 介绍
在计算机科学中,线程是一种用于将程序分为多个独立运行的执行单元的方式。线程可以同时执行多个任务,并且提高了程序的性能和响应速度。Java作为一门面向对象的编程语言,也提供了强大的线程支持。
本文将介绍线程的八大核心概念,并且深入探讨Java的并发原理。我们将通过代码示例来展示这些概念的使用和效果。
2. 线程的八大核心概念
- 创建线程:创建线程的方式有两种,一种是继承Thread类,一种是实现Runnable接口。下面是一个继承Thread类创建线程的示例代码:
class MyThread extends Thread {
public void run() {
System.out.println("Thread running");
}
}
public class Main {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
}
}
- 线程的状态:线程在执行过程中会经历多个状态,包括新建、就绪、运行、阻塞和死亡等。可以通过Thread类的getState()方法来获取线程的状态。下面是一个展示线程状态的示例代码:
public class Main {
public static void main(String[] args) {
Thread thread = new Thread();
System.out.println("Thread state: " + thread.getState());
}
}
- 线程的优先级:线程可以设置优先级来影响其被调度的顺序。优先级范围从1到10,默认为5。可以通过Thread类的setPriority()和getPriority()方法来设置和获取线程的优先级。
public class Main {
public static void main(String[] args) {
Thread thread = new Thread();
thread.setPriority(Thread.MAX_PRIORITY);
System.out.println("Thread priority: " + thread.getPriority());
}
}
- 线程的同步:在多线程程序中,线程之间可能会共享资源。如果不进行同步控制,就可能导致数据不一致或者其他错误。可以使用synchronized关键字来实现线程的同步。
class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
public class Main {
public static void main(String[] args) {
Counter counter = new Counter();
for (int i = 0; i < 10; i++) {
Thread thread = new Thread(() -> {
for (int j = 0; j < 1000; j++) {
counter.increment();
}
});
thread.start();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Count: " + counter.getCount());
}
}
- 线程的通信:线程之间可以通过共享变量来进行通信。可以使用wait()和notify()方法来实现线程的等待和唤醒。
class Message {
private String content;
private boolean available = false;
public synchronized String read() {
while (!available) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
available = false;
notifyAll();
return content;
}
public synchronized void write(String content) {
while (available) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.content = content;
available = true;
notifyAll();
}
}
public class Main {
public static void main(String[] args) {
Message message = new Message();
Thread readerThread = new Thread(() -> {
String content = message.read();
System.out.println("Message read: " + content);
});
Thread writerThread = new Thread(() -> {
String content = "Hello, World!";
message.write(content);
System.out.println("Message written: " + content);
});
readerThread.start();
writerThread.start();
}
}
- 线程的睡眠:线程可以通过sleep()方法来暂停一段时间。可以使用Thread类的sleep()方法来使线程进入睡眠状态。
public class Main {
public static void main(String[] args) {
System