我是靠谱客的博主 酷炫凉面,最近开发中收集的这篇文章主要介绍Java学习笔记6——多线程(根据狂神说视频整理)Java学习笔记6——多线程(根据狂神说视频整理),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Java学习笔记6——多线程(根据狂神说视频整理)
1.为什么要多线程?
平常我们所写的程序都是单线程的吗,效率慢。
举个例子:
public static void main(String[] args){
sentenceA;
function();//执行方式是main开始执行sentenceA,再执行function中的1
//、2、3语句,最后再执行sentenceB语句。
sentenceB;
}
void function(){
sentence1;
sentence2;
sentence3;
}
public class Test07 {
public static void main(String[] args) {
new Thread(()-> System.out.println("线程"+Thread.currentThread().getName()),"线程1").start();
new Thread(()-> System.out.println("线程"+Thread.currentThread().getName()),"线程2").start();
new Thread(()-> System.out.println("线程"+Thread.currentThread().getName()),"线程3").start();
}
}
二者的区别如图:
2.程序、进程、线程
- 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。
- 进程是程序的依次执行的过程,是个动态的概念。是系统资源分配的单位。
- 通常在一个进程可包含若干个线程。
3.线程中的内存分配
每个线程都有程序计数器(CP)来标记程序执行到那个位置;还有栈,栈空间操作起来最快但是栈很小;cp和栈是每个线程私有的。
堆区是进程中所有线程共有的区域,共享资源在这。
4.线程创建的方式
- 继承Thread类;
- 实现Runnable接口;(推荐)
静态代理模式:new Thread(()->System.out.println(“线程”)); - 实现Callable;(了解)
5.线程的五种状态
- 创建:线程一旦new出来进入创建状态
- 就绪:调用start(),进入就绪状态,但并不是立即调度
- 运行:真正的运行run中的代码块
- 阻塞:调用sleep、wait或同步锁定时,线程阻塞。
- 死亡:线程结束。
6.线程的一些常用方法
6.1 sleep()
- static void sleep(mills):让当前程序睡眠mills毫秒;
- sleep 存在异常 InterruptedException;
- sleep到达后线程进入就绪状态;
- sleep不释放锁;
6.2 yield()
- yield():礼让线程;
- 让当前线程暂停,但不阻塞;
- 线程由运行状态变为就绪状态;
- 由CPU重新调度,有可能还是此线程。
6.3 join()
强制插队,thread.join()后,执行完thread再执行其他线程,此时其他线程阻塞。
7.线程的状态
- NEW
- RUNNNABLE
- BLOCKED
- WAITING
- TERMINATED
用thread.getState()获得thread当前状态;
8.线程优先级
可以设置线程优先级:1-10;
MIN_PRIORITY=1;
NORM_PRIORITY=5;
MAX_PRIORITY=10;
相关方法:getPriority()、setPriority()
9.守护线程
setDaemon(true)//设置为守护线程
线程分为用户线程和守护线程,系统不必等守护线程结束就结束
10.线程同步
1.synchronized(obj){}
2.lock();
…
…
unlock();
最后
以上就是酷炫凉面为你收集整理的Java学习笔记6——多线程(根据狂神说视频整理)Java学习笔记6——多线程(根据狂神说视频整理)的全部内容,希望文章能够帮你解决Java学习笔记6——多线程(根据狂神说视频整理)Java学习笔记6——多线程(根据狂神说视频整理)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复