栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Java学习总结】多线程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java学习总结】多线程

一、线程简介 1.什么是进程:

进程是程序的运行过程,是系统进行资源分配和调度的一个独立单位。通俗来讲,进程就是在操作系统中运行的程序,例如:电脑中运行的微信、eclipse、idea等。

2.什么是线程

线程是操作系统能够进行运算调度的最小单位。一个进程至少有一个线程,一个程序可以有多个线程。

3.多线程

如果一个程序可以同时运行多个线程,那么这个程序就是多线程的。例如看视频时程序同时进行加载图像、获取字幕和获取弹幕等。

二、线程的创建 1.继承Thread类

步骤:

(1)创建线程类,并继承Thread类
(2)重写run()方法,编写线程执行体
(3)创建线程对象,调用start()方法启动线程
示例代码如下:

public class TestThread extends Thread{
    @Override
    public void run() {
        //重写run方法线程执行体
        for (int i = 0; i < 100; i++) {
            System.out.println("testThread线程第"+i+"次执行");
        }
    }
    public static void main(String[] args) {
    	//创建线程对象
        TestThread testThread = new TestThread();
        //调用start()方法开启线程
        testThread.start();//子线程开启,和主线程交替执行
        //main线程执行一个for循换
        for (int i = 0; i < 100; i++) {
            System.out.println("main线程第"+i+"次执行");
        }
    }
}

执行结果如下图所示,testThread和main两个线程会交替执行100次。截取了部分输出结果。

2.实现Runnable接口

步骤:

(1)定义MyRunnable类实现Runnable接口
(2)实现run()方法,编写线程执行体
(3)创建Runnable接口的实现类对象
(4)创建线程对象,调用start()方法启动线程
示例代码如下:

public class TestRunnable implements Runnable{
    @Override
    public void run() {
        //重写run方法线程体
        for (int i = 0; i < 100; i++) {
            System.out.println("testRunnable线程第"+i+"次执行");
        }
    }
    public static void main(String[] args) {
        //创建Runnable接口的实现类对象
        TestRunnable testRunnable = new TestRunnable();
        //创建线程对象,通过线程对象来开启我们的线程,代理
        Thread thread = new Thread(testRunnable);
        //调用start方法,启动线程
        thread.start();//子线程开启,和主线程交替执行
		//main线程执行for循换
        for (int i = 0; i < 100; i++) {
            System.out.println("main线程第"+i+"次执行");
        }
    }
}

执行结果testThread和main两个线程会交替执行100次,和上一段程序一样。

3.实现Callable接口

步骤
(1)实现Callable接口,需要返回值类型
(2)重写call方法,需要抛出异常
(3)创建目标对象
(4)创建执行服务
(5)提交执行
(6)获取结果
(7)关闭服务

public class TestCallable implements Callable {
    //重写call方法
    @Override
    public Boolean call() {
        for (int i = 0; i < 100; i++) {
            System.out.println("testCallable线程执行了"+i);
        }
        return true;
    }
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        TestCallable testCallable = new TestCallable();
        //创建执行服务
        ExecutorService service = Executors.newFixedThreadPool(1);
        //提交执行
        Future future = service.submit(testCallable);
        //获取结果
        Boolean result = future.get();
        //关闭服务
        service.shutdownNow();
    }
}
三、线程状态 1.线程的五种状态

(1)新建状态(New): 线程对象被创建后,就进入了新建状态。执行完
(2)就绪状态(Runnable):调用线程对象的start()方法后,该线程进入就绪状态。此时线程进入等待队列,随时可能被CPU调度执行。
(3)运行状态(Running): run方法被执行时,线程获取CPU权限进行执行,进入了运行状态。
(4)阻塞状态(Blocked): 阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。 当程序运行时候,遇到了 sleep、wait、join等方法或获取同步锁失败时会进入阻塞状态。
(5)死亡状态(Dead): 线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

2.线程的状态关系图:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/327646.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号