Java基础之多线程

本文详细阐述了多线程的概念,包括多线程与方法调用的区别,进程与线程的关系,用户线程与守护线程的特点。介绍了三种创建线程的方法,线程的生命周期,以及线程状态转换的四种途径。探讨了线程优先级和分类,线程同步机制,以及线程间的协作与通信方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多线程

多线程不是一个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类提供。但都只能在同步方法和同步块中使用,否则会抛出异常。
在这里插入图片描述

内容概要:本文详细介绍了扫描单分子定位显微镜(scanSMLM)技术及其在三维超分辨体积成像中的应用。scanSMLM通过电调透镜(ETL)实现快速轴向扫描,结合4f检测系统将不同焦平面的荧光信号聚焦到固定成像面,从而实现快速、大视场的三维超分辨成像。文章不仅涵盖了系统硬件的设计与实现,还提供了详细的软件代码实现,包括ETL控制、3D样本模拟、体积扫描、单分子定位、3D重建分子聚类分析等功能。此外,文章还比较了循环扫描与常规扫描模式,展示了前者在光漂白效应上的优势,并通过荧光珠校准、肌动蛋白丝、线粒体网络流感A病毒血凝素(HA)蛋白聚类的三维成像实验,验证了系统的性能应用潜力。最后,文章深入探讨了HA蛋白聚类与病毒感染的关系,模拟了24小时内HA聚类的动态变化,提供了从分子到细胞尺度的多尺度分析能力。 适合人群:具备生物学、物理学或工程学背景,对超分辨显微成像技术感兴趣的科研人员,尤其是从事细胞生物学、病毒学或光学成像研究的科学家技术人员。 使用场景及目标:①理解掌握scanSMLM技术的工作原理及其在三维超分辨成像中的应用;②学习如何通过Python代码实现完整的scanSMLM系统,包括硬件控制、图像采集、3D重建数据分析;③应用于单分子水平研究细胞内结构动态过程,如病毒入侵机制、蛋白质聚类等。 其他说明:本文提供的代码不仅实现了scanSMLM系统的完整工作流程,还涵盖了多种超分辨成像技术的模拟比较,如STED、GSDIM等。此外,文章还强调了系统在硬件改动小、成像速度快等方面的优势,为研究人员提供了从理论到实践的全面指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值