Java多线程函数:开启、停止线程和线程同步。
Java多线程是Java语言的重要特性之一,它可以同时执行多个线程,从而提高了程序的性能和响应速度。但是,在使用多线程时,也需要注意线程的开启、停止以及线程同步等问题。下面将对Java多线程函数的开启、停止线程和线程同步进行详细介绍。
一、线程的开启
线程的开启是指让一个线程开始执行。Java中开启线程主要有两种方式:
1、实现Runnable接口
实现Runnable接口是Java中开启一个线程的最常用方法。通过实现Runnable接口并覆盖run()方法,可以在新的线程中执行相应的代码。具体步骤如下:
1)定义一个类并实现Runnable接口。
2)覆盖run()方法并写上想要执行的代码。
3)创建一个Thread对象并将Runnable对象作为参数传递给它。
4)通过调用start()方法来开启线程。
示例代码如下:
public class MyRunnable implements Runnable {
public void run() {
//写上想要执行的代码
}
}
//创建Runnable对象
MyRunnable myRunnable = new MyRunnable();
//创建Thread对象
Thread thread = new Thread(myRunnable);
//开启线程
thread.start();
2、继承Thread类
继承Thread类也是Java中开启一个线程的方法之一。通过继承Thread类并覆盖run()方法,可以在新的线程中执行相应的代码。具体步骤如下:
1)定义一个类继承Thread类。
2)覆盖run()方法并写上想要执行的代码。
3)创建该类的对象并调用start()方法开启线程。
示例代码如下:
public class MyThread extends Thread {
public void run() {
//写上想要执行的代码
}
}
//创建MyThread对象
MyThread myThread = new MyThread();
//开启线程
myThread.start();
二、线程的停止
线程的停止是指让一个正在运行的线程停止运行。Java中线程的停止有三种方式:
1、使用boolean类型变量来控制线程的停止
在run()方法中添加一个boolean类型变量作为线程终止的标志,当该变量的值为true时,线程停止运行。示例代码如下:
public class MyRunnable implements Runnable {
private volatile boolean flag = true;
public void run() {
while(flag) {
//写上想要执行的代码
}
}
public void stop() {
flag = false;
}
}
//创建Runnable对象
MyRunnable myRunnable = new MyRunnable();
//创建Thread对象
Thread thread = new Thread(myRunnable);
//开启线程
thread.start();
//停止线程
myRunnable.stop();
2、使用Thread的stop()方法停止线程
Thread类提供了stop()方法来停止一个线程,但是该方法已经被标记为过期,建议不要使用。示例代码如下:
public class MyThread extends Thread {
public void run() {
//写上想要执行的代码
}
}
//创建MyThread对象
MyThread myThread = new MyThread();
//开启线程
myThread.start();
//停止线程
myThread.stop();
3、使用Thread的interrupt()方法停止线程
Thread类提供了interrupt()方法来中断一个线程的运行,该方法并不会立即停止线程,而是给线程发送一个中断信号,让线程在适当的时候停止运行。在run()方法中可以通过调用Thread的isInterrupted()方法来检查线程是否被中断。示例代码如下:
public class MyRunnable implements Runnable {
public void run() {
while(!Thread.currentThread().isInterrupted()) {
//写上想要执行的代码
}
}
}
//创建Runnable对象
MyRunnable myRunnable = new MyRunnable();
//创建Thread对象
Thread thread = new Thread(myRunnable);
//开启线程
thread.start();
//停止线程
thread.interrupt();
三、线程同步
线程同步是指多个线程之间按照一定的顺序进行执行,避免线程之间的冲突和误操作。Java提供了三种线程同步方法:
1、使用synchronized关键字
synchronized关键字可用于修饰方法或代码块,用于保证同一时间只有一个线程执行被synchronized关键字修饰的方法或代码块。其基本格式如下:
synchronized(同步对象){
//需要同步的代码块
}
其中,同步对象可以是任何对象,但是建议使用this关键字作为同步对象,因为每个类的对象都是 的。示例代码如下:
public class MyRunnable implements Runnable {
private synchronized void method() {
//需要同步的代码
}
public void run() {
method();
}
}
//创建Runnable对象
MyRunnable myRunnable = new MyRunnable();
//创建Thread对象
Thread thread = new Thread(myRunnable);
//开启线程
thread.start();
2、使用wait()和notify()方法
wait()和notify()方法是Java提供的线程同步方法之一,它们可以协调多个线程之间的执行顺序。wait()方法可以让当前线程等待并释放对象锁,而notify()方法可以唤醒其他等待该对象锁的线程。具体实现步骤如下:
1)使用synchronized关键字修饰代码块或方法。
2)使用wait()方法让当前线程等待。
3)使用notify()方法唤醒其他等待对象锁的线程。
示例代码如下:
public class MyRunnable implements Runnable {
public void run() {
synchronized (this) {
//需要同步的代码
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
//其他代码
}
}
public void resumeThread() {
synchronized (this) {
notify();
}
}
}
//创建Runnable对象
MyRunnable myRunnable = new MyRunnable();
//创建Thread对象
Thread thread = new Thread(myRunnable);
//开启线程
thread.start();
//唤醒线程
myRunnable.resumeThread();
3、使用Lock和Condition接口
Lock接口和Condition接口是Java提供的线程同步接口之一,它们可以实现更为灵活和高级的线程同步。
Lock接口主要有以下方法:
lock():获得锁。
unlock():释放锁。
Condition接口主要有以下方法:
await():等待条件。
signal():唤醒等待的线程。
具体实现步骤如下:
1)定义一个Lock对象及两个Condition对象。
2)在需要同步的代码块中调用lock()方法获得锁。
3)使用await()方法让当前线程等待。
4)使用signal()方法唤醒其他等待条件的线程。
5)在代码块结束时调用unlock()方法释放锁。
示例代码如下:
public class MyRunnable implements Runnable {
private Lock lock = new ReentrantLock();
private Condition condition1 = lock.newCondition();
private Condition condition2 = lock.newCondition();
public void run() {
try {
lock.lock();
//需要同步的代码
condition1.await();
//其他代码
condition2.signal();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
public void resumeThread() {
lock.lock();
condition1.signal();
lock.unlock();
}
}
//创建Runnable对象
MyRunnable myRunnable = new MyRunnable();
//创建Thread对象
Thread thread = new Thread(myRunnable);
//开启线程
thread.start();
//唤醒线程
myRunnable.resumeThread();
总结
Java多线程的开启、停止线程和线程同步是
