-------------------------学前必读----------------------------------
学习不能快速成功,但一定可以快速入门
整体课程思路:
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 }