初识java多线程技术

一.进程与线程概述

进程可以直接理解为运行的程序,一个进程可以执行多个线程,线程依赖于进程。
注意:多进程计算机并不意味着CPU可以同时执行多个任务。事实上,多进程计算机是通过对程序的不断高效切换来让我们感觉CPU是在同时执行多个任务的。
线程分为单线程多线程。多线程即意味着程序有多条路径去执行同一个任务。多线程的本质其实就是为了有更多的机会去获得CPU的执行权。也正是因为这个特点,多线程会存在线程安全问题。多线程的存在,不是为了提高程序的执行速度,而是为了提高应用程序的使用率。

二.多线程的实现方式

1.通过Thread类

具体操作为:继承Thread类,重写run方法,创建Thread子类的实例(即创建了线程对象),调用start方法启动线程。测试代码:

package package03_thread;

public class ThreadDemo01 extends Thread {
    
    
    //车票数量
    private int tickets = 10;

    @Override
    //重写run方法
    public void run() {
    
    
        while (tickets > 0) {
    
    
            System.out.println(Thread.currentThread().getName() + "卖出第【" + tickets-- + "】张火车票");
        }
    }

    public static void main(String[] args) {
    
    
        //调用start方法启动线程
        new ThreadDemo01().start();
        new ThreadDemo01().start();
        new ThreadDemo01().start();
    }
}

运行截图:

在这里插入图片描述
注意到,Thread方式并没有共享线程之间的数据并且只能单继承Thread类。

2.Runable接口实现

具体实现为:重写run方法,创建Runable实现类的实例,并以此实例传入Thread对象,创建Thread对象,调用start方法启动线程。
测试代码:

package package03_thread;

public class RunableDemo01 implements Runnable{
    
    
    private int tickets = 10;
    @Override
    public void run() {
    
    
        while(tickets > 0) {
    
    
            System.out.println(Thread.currentThread().getName()+"卖出第【"+tickets--+"】张火车票");
        }
    }

    public static void main(String[] args) {
    
    
        Runnable runnable = new RunableDemo01();
        new Thread(runnable).start();
        new Thread(runnable).start();
        new Thread(runnable).start();
    }
}

运行截图:
在这里插入图片描述
该方式实现了数据共享,同时将同一个runable对象交给多个线程去处理,有效地将代码与数据做到了分离。一般情况下这种方式更为常用。

3.线程池实现

测试代码:

package package03_thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class PoolDemo01 implements Runnable{
    
    
    @Override
    public void run() {
    
    
        System.out.println(Thread.currentThread());
    }
    private static int Pool_num = 10;

    public static void main(String[] args) {
    
    
        ExecutorService executorService = Executors.newFixedThreadPool(5);
        for (int i = 0; i < Pool_num; i++) {
    
    
            PoolDemo01 poolDemo01 = new PoolDemo01();
            executorService.execute(poolDemo01);
        }
        executorService.shutdown();
    }
}

运行截图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_46550452/article/details/107215361