系统化学习多线程(一)

-------------------------学前必读----------------------------------

学习不能快速成功,但一定可以快速入门
整体课程思路:
1.实践为主,理论化偏少
2.课程笔记有完整的案例和代码,(为了学习效率)再开始之前我会简单粗暴的介绍知识点案例思路,
有基础的同学听了之后可以直接结合笔记写代码,
如果没听懂再向下看视频,我会手把手编写代码和演示测试结果;
3.重要提示,学编程和学游泳一样,多实践学习效率才高,理解才透彻;
4.编码功底差的建议每个案例代码写三遍,至于为什么...<<卖油翁>>...老祖宗的智慧

-------------------------------------------------------------------------

 1.线程

1.1.什么是线程

线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。(来自百度百科)

一个进程可以有很多线程,每条线程并行执行不同的任务。

1.2.多线程hello word

需求:模拟在计算上一边听歌一边打游戏

三种实现方案如下:

系统化学习多线程(一)
 1 package com.wfd360.thread;
 2 
 3 import com.wfd360.thread.demo01.GameRunnable;
 4 import com.wfd360.thread.demo01.MusicRunnable;
 5 import com.wfd360.thread.demo02.GameThread;
 6 import com.wfd360.thread.demo02.MusicThread;
 7 import org.junit.Test;
 8 
 9 /**
10  * @author 姿势帝-博客园
11  * @address https://www.cnblogs.com/newAndHui/
12  * @WeChat 851298348
13  * @create 05/03 5:27
14  * @description 需求分析:
15  * 1.模拟一边打游戏一边听音乐,在控制台打印输出模拟
16  * 2.把两个业务封装成独立的线程,实现接口Runnable或继承Thread,通过看源码你会发现Thread类实现了接口Runnable,使用本质上这两种方法时一样的。
17  * 3.Thread类提供两个方法,线程主题方法run,启动线程方法start
18  */
19 public class TestDemo {
20     /**
21      * 方式1:实现接口Runnable
22      */
23     @Test
24     public void testRunnable() throws InterruptedException {
25         System.out.println("-------test start-------");
26         // 实例对象
27         MusicRunnable music = new MusicRunnable();
28         GameRunnable game = new GameRunnable();
29         // 创建线程
30         Thread musicThread = new Thread(music);
31         Thread gameThread = new Thread(game);
32         // 启动线程
33         musicThread.start();
34         gameThread.start();
35         System.out.println("--------等待其他线程执行--------------");
36         Thread.sleep(5 * 1000);
37         System.out.println("-------test end-------");
38     }
39 
40     /**
41      * 方式2:继承Thread
42      */
43     @Test
44     public void testThread() throws InterruptedException {
45         System.out.println("-------test start-------");
46         // 创建线程
47         MusicThread musicThread = new MusicThread();
48         GameThread gameThread = new GameThread();
49         // 启动线程
50         musicThread.start();
51         gameThread.start();
52         System.out.println("--------等待其他线程执行--------------");
53         Thread.sleep(5 * 1000);
54         System.out.println("-------test end-------");
55     }
56 
57     /**
58      * 方式3:简写,这种写法一般我们在做模拟测试的使用,在正式代码中建议不使用,可读性较差
59      */
60     @Test
61     public void testThreadSimple() throws InterruptedException {
62         System.out.println("-------test start-------");
63         // 创建线程
64         Thread musicThread = new Thread(() -> {
65             for (int i = 0; i < 100; i++) {
66                 System.out.println("=======听音乐中============" + i);
67             }
68         });
69         Thread gameThread = new Thread(() -> {
70             for (int i = 0; i < 100; i++) {
71                 System.out.println("=======打游戏中============" + i);
72             }
73         });
74         // 启动线程
75         musicThread.start();
76         gameThread.start();
77         System.out.println("--------等待其他线程执行--------------");
78         Thread.sleep(5 * 1000);
79         System.out.println("-------test end-------");
80     }
81 }

相关文章:

  • 2022-12-23
  • 2021-09-28
  • 2021-09-12
  • 2021-10-20
  • 2021-12-08
  • 2021-12-08
猜你喜欢
  • 2021-05-29
  • 2021-11-28
  • 2021-11-28
  • 2021-11-28
  • 2021-12-11
相关资源
相似解决方案