写点什么

涨姿势了!原来这才是 Java 多线程正确的实现方式!网友:亏大发了

发布于: 2021 年 05 月 07 日
涨姿势了!原来这才是Java多线程正确的实现方式!网友:亏大发了

今日分享开始啦,请大家多多指教~


今天给大家分享的是认识线程,创建线程和线程的常用方法。

例程:实现字符缓慢输出

public class ThreadDemo1 {    public static void main(String[] args) throws InterruptedException {        String content = "别人说你不行,是因为他自己做不到。你要尽全力保护你的梦想,那些嘲笑你的人,他们必定会失败," +                "他们想把你变成和他们一样的人。如果你有梦想的话,就要努力去实现, 就这样。";        for (char item : content.toCharArray()) {            System.out.print(item);            //执行到此行休眠200毫秒            Thread.sleep(200);        }    }}
复制代码




多线程的优势-增加运行速度

可以观察下面这个多线程例程,体验多线程时如何增加运行速度的。



该代码运行结果如下:

可见,多线程的优势,可以增加运行速度,缩短运行时间的。

线程的创建方式,动手接触线程(三类六种)

第一类:继承 Thread 类来实现线程的创建(2 种创建方式)

第一类:继承 Thread 类创建方法 1

public class ThreadDemo3 {    static class MyThread extends Thread {        @Override        public void run() {            //线程执行的任务            System.out.println("线程名称: " +                    Thread.currentThread().getName());        }    }    public static void main(String[] args) {        System.out.println("当前线程的名称(主线程):" +                Thread.currentThread().getName());        //创建了线程        Thread t1 = new MyThread();        //运行线程        t1.start();    }}
复制代码

该代码执行如下

第一类:继承 Thread 类创建方法 2

public class ThreadDemo4 {    public static void main(String[] args) {        System.out.println("当前线程的名称(主线程):" +                Thread.currentThread().getName());        Thread thread = new Thread() {            @Override            public void run() {                //线程执行的任务                System.out.println("线程名称: " +                        Thread.currentThread().getName());            }        };        thread.start();    }}
复制代码

该代码执行如下

第一类创建方式(继承 Thread 类的方式)缺点:

Java 语言的设计当中,只能实现单继承,如果该类继承了 Thread 类,也就无法继承其他类。

第二类:实现 Runnable 接口的方式来实现线程的创建(3 种创建方式)

弥补了第一类创建方法的缺点,即 Java 不能多继承,但可以实现多个接口

创建方式①:

该代码执行如下

创建方式②:使用匿名内部类的方式实现线程

public class ThreadDemo6 {    public static void main(String[] args) {        System.out.println("当前线程的名称(主线程):" +                Thread.currentThread().getName());        //使用匿名内部类的方式实现线程        Thread thread = new Thread(new Runnable() {            @Override            public void run() {                System.out.println("线程名: " +                        Thread.currentThread().getName());            }        });        thread.start();    }}
复制代码

该代码执行如下

创建方式③:lambda + 匿名 Runnable 的实现方式

public class ThreadDemo7 {    public static void main(String[] args) {        System.out.println("当前线程的名称(主线程):" +                Thread.currentThread().getName());        //JDK8中的固定写法        //lambda + 匿名 Runnable 的实现方式        Thread thread = new Thread(() -> {            System.out.println("线程名: " +                    Thread.currentThread().getName());        });        thread.start();    }}
复制代码

该代码执行如下

第三类:实现 Callable 接口的方式来实现线程的创建(1 种创建方式)

优点在于可以得到线程执行之后的结果。


该代码执行结果如下

线程休眠(实现方式有三种)

实现方法①优点:精确度很高。缺点:当休眠时间过大时,代码书写较复杂。

public class ThreadDemo9 {    public static void main(String[] args) throws InterruptedException {        System.out.println("开始时间: " + new Date());        //休眠1s        Thread.sleep(1000);        System.out.println("结束时间: " + new Date());    }}
复制代码

代码执行结果如下

当休眠较长时间,可用实现方法②和实现方法③。实现方法②

该代码执行结果如下

实现方法③

public class ThreadDemo9 {    public static void main(String[] args) throws InterruptedException {        System.out.println("开始时间: " + new Date());        //休眠1s        Thread.sleep(TimeUnit.SECONDS.toMillis(1));        System.out.println("结束时间: " + new Date());    }
复制代码

该代码执行结果如下

典型例题:使用两个线程来打印"AABBCCDD"。

解题思路:使用多线程+线程休眠即可完成题目要求

该代码执行结果如下


小结

进程是系统分配资源的最小单位,线程是系统调度的最小单位。一个进程内的线程之间是可以共享资源的。每个进程至少有一个线程存在,即主线程。


今日份分享已结束,请大家多多包涵和指点!

用户头像

还未添加个人签名 2021.04.20 加入

Java工具与相关资料获取等WX: pfx950924(备注来源)

评论

发布
暂无评论
涨姿势了!原来这才是Java多线程正确的实现方式!网友:亏大发了