JAVA多线程

Posted 卡尼慕

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA多线程相关的知识,希望对你有一定的参考价值。

线程与进程

进程

如图,引用中有7个进程。随便打开一个进程,如安全管家。

JAVA多线程

这里的红框内就包含了病毒查杀,首页体检,垃圾清理和电脑加速这几个线程。


进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。


线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。


一个程序运行后至少有一个进程,一个进程中可以包含多个线程。



单线程与多线程

单线程程序:要等待上一个线程完成才能进行下一个线程,也就是依次进行。

多线程程序:多个任务可以同时进行,如百度云网盘可以多个任务同时下载。


主线程

当我们启动JVM虚拟机,加载.class文件时,虚拟机会从main方法开始执行代码。当main中有一个很大的循环时,在这个循环没执行完全之前,下面的代码是不会运行的。


即,JVM启动后,必然有一个执行路径(线程)从main方法开始的,一直执行到main方法结束,这个线程在java中称之为主线程。


创建线程的两种方式

A、继承Thread类


创建线程的步骤:

1 定义一个类继承Thread。

2 重写run方法。

3 创建子类对象,就是创建线程对象。

4 调用start方法,开启线程并让线程执行,同时还会告诉jvm去调用run方法


如果需要获取线程名称,可以通过下面两个方法。

Thread.currentThread()获取当前线程对象

Thread.currentThread().getName();获取当前线程对象的名称


JAVA多线程

上图来自博客,讲述了多线程中的内存图解。


B、实现Runnable接口


创建线程的步骤。

1、定义类实现Runnable接口。

2、覆盖接口中的run方法。。

3、创建Thread类的对象

4、将Runnable接口的子类对象作为参数传递给Thread类的构造函数。

5、调用Thread类的start方法开启线程。


线程池

是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。


使用线程池方式--Runnable接口

Executors:线程池创建工厂类

ExecutorService:线程池类

Future接口:用来记录线程任务执行完毕后产生的结果。线程池创建与使用


l使用线程池中线程对象的步骤:

1、创建线程池对象

2、创建Runnable接口子类对象

3、提交Runnable接口子类对象

4、关闭线程池


 1public class ThreadPoolDemo {
2    public static void main(String[] args) {
3        //创建线程池对象
4        ExecutorService service = Executors.newFixedThreadPool(2);//包含2个线程对象
5        //创建Runnable实例对象
6        MyRunnable r = new MyRunnable();
7
8        //自己创建线程对象的方式
9        //Thread t = new Thread(r);
10        //t.start(); ---> 调用MyRunnable中的run()
11
12        //从线程池中获取线程对象,然后调用MyRunnable中的run()
13        service.submit(r);
14        //再获取个线程对象,调用MyRunnable中的run()
15        service.submit(r);
16        service.submit(r);
17//注意:submit方法调用结束后,程序并不终止,是因为线程池控制了线程的关闭。将使用完的线程又归还到了线程池中
18
19//关闭线程池
20        //service.shutdown();
21    }
22}
23
24public class MyRunnable implements Runnable {
25    @Override
26    public void run() 
{
27        System.out.println("我要一个教练");
28
29        try {
30            Thread.sleep(2000);
31        } catch (InterruptedException e) {
32            e.printStackTrace();
33        }
34        System.out.println("教练来了: " +Thread.currentThread().getName());
35        System.out.println("教我游泳,交完后,教练回到了游泳池");
36    }
37}


使用线程池方式—Callable接口

Callable接口:与Runnable接口功能相似,用来指定线程的任务。其中的call()方法,用来返回线程任务执行完毕后的结果,call方法可抛出异常。


ExecutorService:线程池类

Future接口:用来记录线程任务执行完毕后产生的结果。


线程池创建与使用。

1、使用线程池中线程对象的步骤:

2、创建线程池对象

3、创建Callable接口子类对象

4、提交Callable接口子类对象

5、关闭线程池

JAVA多线程

向左滑动

JAVA多线程
JAVA多线程
JAVA多线程

好好学习

天天向上

以上是关于JAVA多线程的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程与并发库高级应用-工具类介绍

多线程 Thread 线程同步 synchronized

Java多线程具体解释

自己开发的在线视频下载工具,基于Java多线程

什么是JAVA的多线程?

多个用户访问同一段代码