Java基础之多线程

多线程

多线程不是一个Cpu同时做多件事情,而是一个cpu只做一件事,创建多个cpu。
多线程与方法调用的区别:
方法间调用;普通方法调用,从哪里出发回到哪里,是一条闭合的路径。
而多线程使用是多条并行的路径。
程序(静态),进程(动态)与线程:
一个程序就是一个进程。进程是指在操作系统中运行的程序。一个进程包含多个线程。没有线程的进程也被看做“单线程”;
线程就是独立的运行路径。线程是CPU调度和执行的基本单位,而进程是操作系统资源分配 基本单位。线程也经常被称作是“轻权进程“轻量级进程””。
线程只会跟它的工作内存打交道,然后工作内存再与主内存打交道。
用户线程(User Thread):必须等待程序执行完才能停下。运行在前台;Java虚拟机会等待用户线程结束。
守护线程(Daemon Thread):为用户线程服务的。运行在后台;而Java虚拟机不会等待守护线程结束。
####### 创建线程
创建线程有3种方式:
1.继承Thread类,重写run方法,调用用start(),将进程交给CPU;
2.实现Runnable接口,重写run方法,没有继承Thred类,通过new
Thread创建一个thread对象,然后通过thread对象调用start方法。
3.实现Callable接口:它调用call方法;可以抛出异常,而且还可以返回值。
callable创建过程
start也不是马上执行线程,而是将线程交给CPU,CPU调度什么时候用到了就什么时候执行。

优先级高的线程不代表一定会执行。只是分配的几率会大些。

代理模式

之前有提到过装饰模式和代理模式,现在主要了解一下代理模式。
代理模式分为静态代理和动态代理。
静态代理 的类是早就写好了的。而动态代理则是在程序运行过程中自动构建出来的。

####### lamda表达式
jdk8增加的新功能。主要是避免匿名内部类定义过多,其实质属于函数式编程的概念。主要是关注线程体。凡是有匿名内部类的地方的原因lambda就可以使用。
如果有参数和返回值,可以省略参数类型和小括号,若只有一行语句,则可以省略花括号。

线程状态

线程状态
进入死亡状态的线程不能再次进入新生状态,不能重新开启,若是重新开启,则是一个新的线程。
进入阻塞状态的线程不能马上进入运行状态,而是进入就绪状态

线程间的转换
// 可能有些错误,暂时只做了解,后面再深入
进入就绪状态的4种方法:
1.调用start()方法;
2.阻塞事件解除;
3.在运行状态中,调用yield()方法,主动让出CPU的调度,进入就绪状态
4.JVM本身将CPU从本地线程切换到其他线程,本地线程进入就绪状态。

运行状态一定是就绪状态受到了CPU的调度,才会进入运行状态。

进入阻塞状态的4种原因:
1.sleep()方法,抱着资源不给其他人用;
2.wait()方法;等待,不占用资源;
3.join,插队,要等待其他进程运行完才能运行;
4.有些调用操作系统的操作也会使进程进入阻塞状态,例如IO的read和write。

sleep抱着资源睡觉,当遇到slee时,程序从运行状态进入阻塞状态,然后再从阻塞状态进入就绪状态。
yield是从运行状态进入就绪状态。礼让线程。
sleep和yield都是静态方法,直接写在程序中。
join合并线程,将多条线程合并成一条线程,等待该线程执行完毕,才能执行其他线程。join是成员方法,必须通过thread对象来调用。join所在的线程体被阻塞。

在api中线程状态状态的描述
NEW --RUNNABLE–BLOCKED–WAITING–TIMED WAITTING–TERMINATED。

线程优先级和线程分类

priority优先级只代表一个概率,但不是绝对的。

用户线程(User Thread):必须等待程序执行完才能停下。运行在前台;Java虚拟机会等待用户线程结束。
守护线程(Daemon Thread):为用户线程服务的。运行在后台;而Java虚拟机不会等待守护线程结束。

线程同步

synchronized
线程同步是指在多个线程的情况下,要保证数据的一致性和准确性。同时还要提高性能。以上也被称为并发控制。保证了准确性则被称为线程安全。

并发:同一个对象被多个线程同时使用。
线程同步:一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池队列。还有加入了锁机制(synchronized),有同步方法和同步块。
加锁锁住的是相应对象的资源。

同步方法默认用this或者当前类class对象作为锁;
同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法;
同步方法使用关键字 synchronized修饰方法,而同步代码块主要是修饰需要进行同步的代码,用 synchronized(object){代码内容}进行修饰;

Java中四类块
1 局部块 :在方法里面,主要是解决变量 的作用范围
2 构造块: 在类中,与属性一起的区域,主要是初始化对象信息
3 静态块:只加载一次,主要是初始化类的。
4 同步块,synchronized(obj),obj被称为同步监视器

线程协作
并发协作模型–生产者和消费者模式:
解决方式:管程法:生产者-缓冲区-消费者
信号灯法。

线程通信

线程通信中使用的一些方法。由Object类提供。但都只能在同步方法和同步块中使用,否则会抛出异常。
在这里插入图片描述

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值