Java 线程相关总结
线程的概念
线程是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程中的实际运作单位。
Java 中的线程
线程的创建
Java 中可以通过继承 Thread
类或实现 Runnable
接口来创建线程。
继承 Thread 类
public class MyThread extends Thread {
@Override
public void run() {
// 线程需要执行的任务
}
}
MyThread myThread = new MyThread();
myThread.start();
实现 Runnable 接口
public class MyRunnableTask implements Runnable {
@Override
public void run() {
// 线程需要执行的任务
}
}
MyRunnableTask myTask = new MyRunnableTask();
Thread thread = new Thread(myTask);
thread.start();
线程的状态
Java 线程有几种状态:
- NEW:线程新建但是还没有开始执行
- RUNNABLE:线程正在执行
- BLOCKED:线程阻塞,正在等待获取锁
- WAITING:线程在等待,等待其他线程发出通知(notify、notifyAll)
- TIMED_WAITING:线程在等待,等待一定的时间(sleep、wait)
- TERMINATED:线程执行完成或者被中断
线程的状态转换
线程状态转换的示例:
public class MyTask implements Runnable {
private int count = 0;
@Override
public void run() {
synchronized(this) {
count ++;
System.out.println(Thread.currentThread().getName() + "执行第" + count + "次");
if (count == 3) {
try {
System.out.println("线程等待...");
wait(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
MyTask myTask = new MyTask();
new Thread(myTask, "线程1").start();
new Thread(myTask, "线程2").start();
执行结果:
线程1执行第1次
线程2执行第1次
线程1执行第2次
线程2执行第2次
线程1执行第3次
线程等待...
线程2执行第3次
线程的同步
Java 中可以通过 synchronized
关键字来实现线程的同步。synchronized
可以用来修饰方法或者代码块。
public synchronized void syncMethod() {
// 待同步的代码
}
public void syncBlock() {
synchronized(this) {
// 待同步的代码
}
}
线程的通信
Java 中可以通过 wait()
、notify()
、notifyAll()
等方法来实现线程之间的通信。这些方法都需要放在 synchronized
块中,因为只有获得了锁后,才可以调用这些方法。
public class MyTask implements Runnable {
private boolean flag = false;
public synchronized void taskA() {
while(!flag) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + "开始执行任务A");
}
public synchronized void taskB() {
flag = true;
notifyAll();
System.out.println(Thread.currentThread().getName() + "开始执行任务B");
}
@Override
public void run() {
if (Thread.currentThread().getName().equals("线程1")) {
taskA();
} else {
taskB();
}
}
}
MyTask myTask = new MyTask();
new Thread(myTask, "线程1").start();
new Thread(myTask, "线程2").start();
执行结果:
线程2开始执行任务B
线程1开始执行任务A
总结
本文介绍了 Java 中线程的相关概念和使用方法,包括线程的创建、线程的状态、线程的同步、线程的通信等方面。在实际开发中,需要合理地处理好线程的状态和同步问题,确保程序的正确性和性能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 线程相关总结 - Python技术站