欢迎访问宙启技术站
智能推送

Java多线程函数:开启、停止线程和线程同步。

发布时间:2023-06-12 20:50:51

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多线程的开启、停止线程和线程同步是