第二十四课:多线程

第二十四课:多线程
一、理解线程的概念
•Thread
•进程:是应用程序的执行实例,启动一个应用程序就会开启一个或多个进程,它有独立
的内存空间
举例:打开QQ,打开迅雷等
•线程:是CPU调度的基本单位,是进程中的最小单元。它可以独立完成一个顺序控制
流程
举例:多线程下载会更快 启动一个迅雷,同时下载多个任务
•多线程介绍
○单线程:举例1-去网吧,如果网吧是单线程,那么只能允许一个人上网,这个人如果
没上完,那么下一个人就无法进行 举例2-网上买东西,如果是单线程,
那么意味着在买东西时,只能有一个人挑选,等他结束后,另外一个人才能进行
○多线程:举例1-网上买东西,同时可以有很多人在买不同/相同的衣服 举例2-连
接网线上网,它也是“多线程” 一个进程中有多个线程 多个线程是交替占
用CPU资源,不是并行 抢占式调度(谁抢到运行资格谁就运行)而非均
时调度等

二、掌握线程的创建和启动
1.主线程:程序中有且仅有一个主线程,它应该是最先开启,最后关闭!同时也是能够开
启其它子线程的一个线程 我们之前的编程都是在玩单线程模式-主线程
•Java中main方法就是主线程(main)的入口

Thread currentThread(); // 获取当前的线程对象
void setName(String name); // 给线程设置名称
2.多线程编程
⑴继承Thread类的形式
①定义类去继承Thread
②重写run()方法 它是线程所要执行的内容
③创建线程对象
④执行start()方法 开启线程
⑵实现Runnable接口(推荐:Java是单根继承)
①定义类去实现Runnable接口(组件 非完整线程)
②重写run()方法
③借助Thread类来创建县城对象
Thread(Runnable runnable)
Thread(Runnable runnable,String threadName)
④执行start()方法 开启线程
3.run()和start()的区别
⑴如果在主线程中直接调用run()方法,那么就只会像调用其他普通方法一样执行了run()
方法内的代码段 不会产生新的线程,全程都是主线程在干活
⑵而当调用了start()方法之后呢,它是会开启一个新的子线程,然后去调用run()方法执
行线程的操作,该子线程和主线程是交替执行的!

三、了解线程的状态(五种)
1.创建状态:当线程对象创建之后
2.就绪状态:调用了start()方法之后
3.运行状态:线程争抢到CPU资源之后
4.死亡状态:线程执行完毕 或者 干涉结束
5.阻塞状态:当执行了线程休眠 或者 用户输入时 会进行阻塞 结束阻塞之后 会进行就
绪状态重新等待抢占资源

四、掌握线程调度的常用方法
1.优先级:•线程默认的优先级为5,优先级的范围是[1,10]
•可以通过设置优先级来调整争抢的概率
•设置优先级:setPriority(优先级的数字值);
•获取优先级:int getPriority();
•Thread中有三个常量 分别表示 最低、默认、最高优先级
2.休眠:Sleep(毫秒值);

五、掌握线程的同步
•多线程 在同时操作 同一个资源 时(增删改)就会出现此问题
•添加synchronized关键字 或者添加synchronized代码块
•加锁的内容,JVM只会允许一个线程进入,其他线程需要等待!但是未加锁部分 只要
是在run方法中,其他线程还是能继续执行

六、理解线程安全的类型
越安全,效率越低
StringBuffer
StringBuilder

Hashtable
HashMap

Vector
ArrayList

你可能感兴趣的:(第二十四课:多线程)