JavaSE基础及案例(二)多线程(下)与简单工厂模式的了解

JavaSE 基础内容 - JavaSE 笔记(七)多线程与反射 我们发现,现在得到的结果就是我们想要的内容了,因为在同步代码块执行过程中,拿到了我们传入对象或类的锁(传入的如果是对象,就是对象锁,不同的对象代表不同的对象锁,如果是类,就是类锁,类锁只有一个,实际上类锁也是对象锁,是Class类实例,但是Class类实例同样的类无论怎么获取都是同一个),但是注意两个线程必须使用同一把锁!实际上,Java程序中的每个线程并不是平均分配CPU时间的,为了使得线程资源分配更加合理,Java采用的是抢占式调度方式,优先级越高的线程,优先使用CPU资源! 阅读详情

1.多线程(下)

1.1单例设计模式:保证类在内存中只存在一个对象
************饿汉式与懒汉式的区别【面试题】

  1. 饿汉式单例模式:以空间换时间
  2. 懒汉式单例模式:以时间换空间(不推荐使用,仅在面试中用到)
    3.多线程访问时:饿汉式不会创建多个对象;而懒汉式模式有可能会创建多个对象【弊端】
/* @author ZHENG
 *	饿汉式
*/
class Singleton{
	//1.私有构造方法,其他类不能访问该构造方法
	private Singleton(){
		
	}
	//2.创建本类对象(私有成员变量)
	private static Singleton s = new Singleton();
	//3.对外提供公共的访问方法
	public static Singleton getInstance(){
		return s;
	}
}
/**
 * @author ZHENG
 *	懒汉式:单例延迟加载模式
 */
class Singleton{
	//1.私有构造方法,其他类不能访问该构造方法
	private Singleton(){
		
	}
	//2.声明一个引用
	private static Singleton s;
	//3.对外提供公共的访问方法
	public static Singleton getInstance(){
		if(s==null){
			//线程1等待,线程2等待
			s=new Singleton();
		}
		return s;
	}
}

1.2第三种单例设计模式
非重点

class Singleton{
	//1.私有构造方法,其他类不能访问该构造方法
	private Singleton(){
		
	}
	//2.声明一个引用
	public final static Singleton s=new Singleton();
	
}

1.3多线程之RunTime类(了解)

public class demo2_Runtime {
	public static  void main(String[] args) throws IOException{
		Runtime r = Runtime.getRuntime();//获取运行时对象
		/*r.exec("shutdown -s -t 300");//设置电脑5分钟后关机
*/		r.exec("shutdown -a");
	}
}

1.4多线程之Timer类
Timer:一种计时器
TimerTask:创建一个计时器任务

t.schedule(安排的任务,new Date(当前年份-1900,月,日,时,分,秒),多长时间重复执行) //指定时间执行指定的任务

/**
 * @author ZHENG
 *	timer指定时间安排指定任务
 */
public class demo3_Timer {
	public static void main(String[] args) throws InterruptedException{
		Timer t = new Timer();
		//指定时间安排指定任务
		//t.schedule(安排的任务,new Date(当前年份-1900,月,日,时,分,秒),多长时间重复执行)
		//2018年11月3日
		t.schedule(new MyTimerTask(), new Date(118,10,3,19,39,10), 3000);
		while(true){
			Thread.sleep(1000);
			System.out.println(new Date());
		}
	}
}
class MyTimerTask extends TimerTask{
	@Override
	public void run() {
		System.out.println("起床了...");
	}
}

1.5多线程之线程之间的通信
-------wait方法:其他对象调用此对象的notify,导致当前线程等待
-------notify:两个线程间的通信:唤醒等待的单个线程
-------notifyAll:多个线程间的通信:唤醒所有线程
注意事项:1.在同步代码块中,用哪个对象锁,就用哪个对象调用wait方法;
2.sleep方法和wait方法区别?
—2.1.sleep必须传入时间参数,时间到了自动醒来;
wait既可以传入参数,也可以不传入参数,如果传入参数就是在参数时间结束后等待,若不传入参数就是直接等待;
—2.2.sleep方法在同步函数或同步代码块中,不释放锁;
wait方法在同步函数或者同步代码块中释放锁;
以下代码为两个线程之间的通信
同步代码块使用if判断

public class demo4_notify {
	/**
	 * @param args
	 * 
	 * 等待唤醒机制
	 */
	public static void main(String[] args){
		final Print p = new Print();
		while(true){
			new Thread(){
				public void run(){
					try {
						p.print1();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}.start();
			new Thread(){
				public void run(){
					try {
						p.print2();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}.start();
		}
	}
}
class Print{
	private int flag = 1;
	public void print1() throws InterruptedException{
		//非静态代码块使用this
		synchronized (this) {
			if(flag != 1){
				this.wait();//当前线程等待
			}
			System.out.print("好");
			System.out.print("好");
			System.out.print("学");
			System.out.print("习");
			System.out.println();
			flag = 2;
			this.notify();//随机唤醒单个等待的线程
		}
	}
	public void print2() throws InterruptedException{
		//非静态代码块使用this
		synchronized (this) {
			if(flag != 2){
				this.wait();//当前线程等待
			}
			System.out.print("天");
			System.out.print("天");
			System.out.print("向");
			System.out.print("上");
			System.out.println();
			flag = 1;
			this.notify();//随机唤醒单个等待的线程
		}
	}
}

以下代码为多个线程间通信,代码块中使用while判断

public class demo5_notifyAll {


	/**
	 * @param args
	 * 三条线程调用三个方法:使用while
	 * 等待唤醒机制
	 */
	public static void main(String[] args){
		final PrintAll p = new PrintAll();
		while(true){
			new Thread(){
				public void run(){
					try {
						p.print1();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}.start();
			new Thread(){
				public void run(){
					try {
						p.print2();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}.start();
			new Thread(){
				public void run(){
					try {
						p.print3();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}.start();
		}
	}
}
class PrintAll{
	private int flag = 1;
	public void print1() throws InterruptedException{
		//非静态代码块使用this
		synchronized (this) {
			while(flag != 1){
				this.wait();//当前线程等待
			}
			System.out.print("好");
			System.out.print("好");
			System.out.print("学");
			System.out.print("习");
			System.out.println();
			flag = 2;
			this.notifyAll();//随机唤醒所有等待的线程
		}
	}
	public void print2() throws InterruptedException{
		//非静态代码块使用this
		synchronized (this) {
			while(flag != 2){
				this.wait();//当前线程等待
			}
			System.out.print("天");
			System.out.print("天");
			System.out.print("向");
			System.out.print("上");
			System.out.println();
			flag = 3;
			this.notifyAll();//随机唤醒所有等待的线程
		}
	}
	public void print3() throws InterruptedException{
		//非静态代码块使用this
		synchronized (this) {
			while(flag != 3){
				this.wait();//当前线程等待
			}
			System.out.print("-");
			System.out.print("毛");
			System.out.print("主");
			System.out.print("席");
			System.out.println();
			flag = 1;
			this.notifyAll();//随机唤醒所有等待的线程
		}
	}
}

1.6多线程之互斥锁
-----------ReentrantLock:创建互斥锁>>>>>>>>>>ReentrantLock r = new ReentrantLock
----r.lock:获取锁
----r.unlock:释放锁

private ReentrantLock r = new ReentrantLock();//互斥锁
	private Condition c1 = r.newCondition();//创建3个监视器
	private Condition c2 = r.newCondition();
	private Condition c3 = r.newCondition();

对1.5由synchronized实现的多个线程间通信优化(1.5特性)

public class demo1 {
	public static void main(String[] args){
		final PrintAll p = new PrintAll();
		while(true){
			new Thread(){
				public void run(){
					try {
						p.print1();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}.start();
			new Thread(){
				public void run(){
					try {
						p.print2();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}.start();
			new Thread(){
				public void run(){
					try {
						p.print3();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}.start();
		}
	}
	}
class PrintAll{
	private ReentrantLock r = new ReentrantLock();//互斥锁
	private Condition c1 = r.newCondition();//创建3个监视器
	private Condition c2 = r.newCondition();
	private Condition c3 = r.newCondition();
	private int flag = 1;
	public void print1() throws InterruptedException{
		r.lock();//获取锁
				if(flag != 1){
				c1.await();//c1等待
			}
			System.out.print("好");
			System.out.print("好");
			System.out.print("学");
			System.out.print("习");
			System.out.println();
			flag = 2;
			c2.signal();//唤醒c2
		r.unlock();//释放锁
	}
	public void print2() throws InterruptedException{
		r.lock();
			if(flag != 2){
				c2.await();
			}
			System.out.print("天");
			System.out.print("天");
			System.out.print("向");
			System.out.print("上");
			System.out.println();
			flag = 3;
			c3.signal();
		r.unlock();
	}
	public void print3() throws InterruptedException{
		r.lock();
			if(flag != 3){
				c3.await();;
			}
			System.out.print("-");
			System.out.print("毛");
			System.out.print("主");
			System.out.print("席");
			System.out.println();
			flag = 1;
			c1.signal();
		r.unlock();
	}
}

1.7多线程的5种状态【面试题】
在这里插入图片描述
1.8线程池
1.创建两个线程池
ExecutorService pool = Executors.newFixedThreadPool(2);

2.工厂模式【了解】

2.1简单工厂设计模式【了解】
第一步:创建一个抽象的Animal类

public abstract class Animal {

	public abstract void eat();
}

第二步:创建猫和狗类对象继承自Animal类

public class Cat extends Animal {

	@Override
	public void eat() {
		System.out.println("猫吃鱼");
	}

}

public class Dog extends Animal {

	@Override
	public void eat() {
		System.out.println("狗吃肉");
	}
}

第三步创建Animal的工厂类

public class Animal_Fac {
	public static Animal creatAnimal(String name){
		if("dog".equals(name)){
			return new Dog();
		}else if("cat".equals(name)){
			return new Cat();
		}else{
			return null;
		}
	}
}

第四步:创建测试类实现简单工厂模式

public class Test {
	public static void main(String[] args){
		Dog cd = (Dog) Animal_Fac.creatAnimal("dog");
		cd.eat();
		Animal ct = Animal_Fac.creatAnimal("cat");
		ct.eat();
	}
}

2.2工厂方法
第一步:创建动物抽象类,dog类与cat类分别继承该抽象类,步骤如1.9前三步;
第二步:创建工厂接口

/**
 * @author ZHENG
 *	工厂接口
 */
public interface Fac_Inter {
	public Animal creatAnimal();
}

第三步:分别创建Cat工厂和Dog工厂实现第二步中动物工厂接口

public class Cat_Fac implements Fac_Inter {
	@Override
	public Animal creatAnimal() {
		return new Cat();
	}
}
public class Dog_Fac implements Fac_Inter {
	@Override
	public Animal creatAnimal() {
		return new Dog();
	}
}

第四步:创建测试类,实现代码

public class Test {

	public static void main(String[] args) {
		Cat_Fac cf = new Cat_Fac();/*与创建狗工厂方法相同*/
		Dog_Fac df = new Dog_Fac();//创建狗工厂对象
		Dog d = (Dog) df.creatAnimal();//调用方法,向下强转,得狗对象
		d.eat();//狗对象调用方法
	}
}

2.3适配器设计模式
适配器原理:
1.适配器就是一个类实现监听接口,所有抽象方法都被重写,但是方法是空的;
2.适配器需要定义成抽象的,因为创建该类对象,调用空方法无意义;
3.目的:简化操作,定义监听器时继承适配器,仅重写需要的方法即可;

public class shipeiqi {
	public static void main(String[] args){
		
	}
}
interface 和尚{
	public void 打坐();
	public void 念经();
	public void 撞钟();
	public void 习武();
}
/**
 * 该类即是适配器类
 * 
 * 声明成抽象的,防止其他类调用水浒传里的方法,因为创建也无意义,方法都是空的
 */
abstract class 水浒传 implements 和尚{

	@Override
	public void 打坐() {
		
	}

	@Override
	public void 念经() {
		
	}

	@Override
	public void 撞钟() {
		
	}

	@Override
	public void 习武() {
		
	}
	
}
/**
 * 鲁智深仅有习武这个方法
 * 
 * 如果唐僧实现和尚这个接口,可以通过适配器,需要哪个方法就重写哪个方法
  */
class 鲁智深 extends 水浒传{
	public void 习武(){
		System.out.println("倒拔垂杨柳");
		System.out.println("拳打镇关西");
		System.out.println("......");
	}
}

2.4设计模式之模板(Template)

public class demo2 {
	public static void main(String[] args){
		Demo d = new Demo();
		System.out.println(d.getTime());
	}
}
/**
 * @author 
 *	模板:定义一个框架模型,如需改动更改子类即可
 */
abstract class GetTime{
	public final long getTime(){//子类不可更改该方法
		long start = System.currentTimeMillis();
		code();
		long end = System.currentTimeMillis();
		return (end-start)/1000;
	}
	public abstract void code();//让子类可以重写该方法
}
class Demo extends GetTime{
	@Override
	public void code() {
		for (int i = 0; i < 100000; i++) {
			System.out.println(i);
		}
	}
}

《JavaSE系列教程》 本专栏内容是为零基础正在学习Java的学习者量身定制的学习路线及方案,本教程字数超20w+,插图超过400+,知识体系极其全面,案例极其丰富。本配备有专门的学习群及学习视频,读者可加学习群与正在学习该阶段的人一同学习,有任何不懂的也可以观看于此教程配套的学习视频。 阅读详情

相关推荐

JavaSE核心概念与15个实战项目源码详解

本文还有配套的精品资源,点击获取 简介:JavaSE作为Java语言的基础部分,提供了丰富的类库和API,对后续的JavaEE和Android开发至关重要。本资源包提供了15个实战项目代码,覆盖了从控制台应用、数据结构与算法、文件和I/O操作到GUI编程、多线程、网络编程等多个方面。学习者可以通过这些实战项目,全面练习和巩固JavaSE知识,提升编程技能。 1. ...

weixin_28736145的博客 1471

Java多线程基础-11:工厂模式及代码案例之线程池

Java中代码案例之线程池,详解 ExecutorService 接口,ThreadPoolExecutor类,代码实现线程池;详解工厂模式

wyd_333的博客 2305

JavaSE 实用学习案例:抢钱游戏与记事本

本文还有配套的精品资源,点击获取 简介:JavaSE是Java开发的标准版,为桌面应用提供必要工具。本学习实例包含抢钱游戏和记事本两个小程序,通过实战案例讲解JavaSE核心概念,如Java语法基础、类与对象、异常处理等,以及如何构建GUI应用。学习者通过分析源代码,理解Java编程逻辑,提高编程技能。 1. Java语法基础 1.1 数据类型和变量 ...

weixin_42350014的博客 784

【多线程】(五)工厂模式和线程池

线程池是一种管理和复用线程的机制。线程池维护着一个线程队列,其中包含着多个准备好的线程。当有任务需要执行时,线程池中的线程可以被分配来执行任务,执行完成后又可以返回线程池以供下一次使用。

qq_61635026的博客 1115

线程池 + 工厂模式 + 工厂方法 + 单件模式

线程池、工厂模式、工厂方法、单件模式、内存池的简单实现,代码量1300 行,有测试样例 ~ 发现有BUG请指正, thx

6-3 根据派生类写出基类(Java解法)(PTA)

主要是看main函数里调用了什么方法和输出样例,一一对应一下有思路再写就很简单.建议使用IDEA自动生成,可以少写很多代码。

u012137663的博客 1143

java多线程之流水线工厂模式

在主函数里我们创建一个队列来储存任务,并将任务传到每一个线程里来完成加工操作,然后调用start方法开起线程,再调用join方法等待所有线程都完成之后将每个成品打印出来。当第一个产品到第一个工作间用时1个单位时间,再接着进入第二个工作间依次下去,就当第一个产品完成第一个工作间任务时,第二个进入一个工作间。当我们需要对一个产品进行多次不同的操作时,比如我们要对一个队列List 进行加工,先将List传入T1工作间,加工完后,再传入T2、T3进行加工,最后得到成品。这时我们就用到流水线工厂模式进行加工。

woai3364的博客 726

RK3588设备树节点实战:从零配置音频与显示模块(ES8388+DSI0)

本文详细介绍了在RK3588平台上配置音频编解码器ES8388和显示接口DSI0的设备树节点实战。通过具体案例拆解设备树节点的编写逻辑与调试技巧,包括音频路由与声卡配置、DSI控制器基础配置、视频通路路由配置以及电源管理与时钟树设计。文章还提供了调试工具与实战技巧,帮助开发者快速解决常见问题。

weixin_42525637的博客 354

Java多线程-56-简单工厂设计模式

关于设计模式,前面我们学习了单例设计模式,这篇再来学习一个工厂方法模式,在介绍工厂方法模式之前,我们来看一个简单工厂模式。工厂模式的最大优点就是客户端不需要再创建对象,工厂类中就帮你提前创建好了,直接通过工厂类名点方法调用就好。简单工厂模式又叫静态方法工厂模式,它定义了一个具体的工厂类来创建一些类的实例。 1.代码举例 在Eclipse下创建一个samplefactory包,然后下面创建以下几...

Anthony_tester的博客 850

Jetson平台XDMA PCIe驱动安装与测试全指南

本文提供了一份在NVIDIA Jetson平台上安装与测试Xilinx FPGA XDMA PCIe驱动的完整指南。详细阐述了驱动作为高速DMA引擎的核心作用,并逐步讲解了从环境准备、驱动编译、内核模块加载到实际数据传输测试的全过程。内容涵盖常见问题排查与性能优化建议,帮助开发者实现Jetson与FPGA间的高速数据通信,适用于自动驾驶、工业视觉等需要异构计算的应用场景。

weixin_29196315的博客 528

手把手教你用Trae配置Python开发环境(含Claude 3.5代码生成实战)

本文详细介绍了如何使用字节跳动推出的Trae智能开发环境配置Python开发环境,并实战演示了Claude 3.5代码生成功能。从环境准备到项目初始化,再到AI辅助编码和调试优化,全面展示了Trae在提升开发效率方面的强大能力,特别适合Python开发者快速搭建项目和解决复杂问题。

weixin_28309571的博客 977

【多线程】线程工厂模式创建多线程

通过实现ThreadFactory 来创建线程工厂public class TestingThreadFactory implements ThreadFactory{ //Executors 线程池的顶级接口,创建默认线程工厂 ThreadFactory factory=Executors.defaultThreadFactory(); @Override ...

sinat_35821285的博客 1150

从机械到数字:EC11旋转编码器与ESP32的PWM控制艺术

本文详细解析了EC11旋转编码器与ESP32的PWM控制技术,探讨了如何将机械旋转动作转换为精确的数字信号控制。通过硬件连接、信号处理和软件优化等实践技巧,开发者可以构建高效的人机交互系统,适用于智能照明、电机控制等多种应用场景。

android的专栏 786

【JavaSE】之基础语法

Java基础语法介绍,注释,标识符和关键字,数据类型,类型转换,变量与常量,基本运算等~

小新要变强的博客 7569

利用CAT12做皮层指标的统计分析及可视化笔记记录

利用CAT12做皮层指标的统计分析及可视化 文章目录利用CAT12做皮层指标的统计分析及可视化前言一、统计步骤1.Basic Models2.Estimate Surface Models3.Results二、可视化1.t值可视化2.p值可视化 前言 本来没有打算做SBM的,因为自己是新手小白,许多操作都不太懂,但最后还是打算做一下,于是就从上周末开始将很久之前跑VBM得到的surf文件夹中的数据捡起来继续做皮层分析,因为之前看了一个博主的博客,关于如何做SBM已经讲得非常清楚了,但是在统计及可视化这里,我

weixin_52073820的博客 8094

机器人多学科仿真软件:Webots_(19).Webots的插件与扩展开发

通过上述步骤,您可以开发和使用Webots的插件、扩展和接口,以增强其功能和灵活性。

kkchenjj的博客 926

JavaSE 总复习:语法到多线程全梳理

JavaSE 高效复习指南(150字摘要) 本文提出结构化复习JavaSE的方法,强调从问题解决角度切入而非死记API。将JavaSE划分为12个核心模块,每个模块明确其解决的问题:基础语法构建代码基础,面向对象组织代码结构,集合管理数据,IO处理文件读写,多线程实现并发等。复习重点包括:掌握最小实现代码、识别常见错误、设计自测方案。特别提醒关注面向对象、集合、IO和多线程等核心模块,同时注意JDK版本差异。文章采用"问题导向+代码实践"的方式串联知识点,并提供详细笔记链接供深入查阅。 (150字)

一个持续进化的java+ai学习者博客:AI Agent 工具链(Codex、Harness、Claude Code、MCP、Skills)实战笔记 + 后端开发教程,每周稳定更新。 4923

UE5 GAS 学习笔记 1.2游戏标签

这一节对GameplayTag游戏标签进行详细的讲解。

CloudHuCoding 1928

JavaSE多线程之卖电影票案例

JavaSE多线程之卖电影票案例 1.继承Thread类的方式卖电影票 A:案例演示 需求:某电影院目前正在上映贺岁大片,共有100张票,而它有3个售票窗口售票,请设计一个程序模拟该电影院售票。 通过继承Thread类实现 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020060620085618.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6L

ITzhazhassc的博客 1858

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JavaSE多线程《二》

JavaSE多线程《一》回顾 三·多线程的常用操作方法 3.1 线程的命名于取得命名 多线程的运行状态是不确定的,所以对于多线程操作必须有一个明确标识出线程对象的信息,这个信息往往通过名称来描述。在Thread类中提供有如下的线程名称方法: 要想取得线程的对象,在Thread类中提供有一个方法取得当前线程对象: /** * Returns a reference to the currently...

LeBronJJJ的博客 235

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

JavaSE基础利用集合完成斗地主综合案例

JavaSE基础利用集合完成斗地主综合案例

weixin_43774841的博客 572

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

JavaSE多线程笔记

javase多线程笔记

cc_1113的博客 917

什么是javaEE、javaSE、javaME,这三者区别是什么?

转载来源 https://blog.youkuaiyun.com/qq_41566219/article/details/103976189 1,javaSE是什么? 怎么说吧,可以理解为javaSE是java的基石,如果将java程序想象成一座高楼大厦,那么javaS...

song_6666的博客 2万+

初步了解JavaSE

Java SE(Java Standard Edition,Java标准版)是Java技术的核心和基础,它是Java ME和Java EE编程的基础。Java SE是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。Java SE提供了一个程序开发环境,包括编译器等开发工具、软件库及Java虚拟机(JVM)。这个环境支持跨平台、动态的Web、Internet计算,推动了Web的迅速发展。

AXDRXS的博客 939

JavaSE基础:多线程

JavaSE基础:多线程 文章目录JavaSE基础:多线程前言一、基本概念1、什么是进程?什么是线程?2、java程序中的线程3、进程和线程的关系4、对于单核的CPU来说,真的可以做到真正的多线程并发吗?5、实现线程的两种方式6、线程对象的生命周期二、线程的调度和数据安全1、常用的线程调度模型2、有关线程调度的方法3、数据安全(重点)4、存在安全问题的三个条件5、解决线程安全问题6、异步和同步编程模型7、三大变量的线程安全问题8、局部变量的使用9、synchronized三种写法三、守护线程1、概念2、例子

weixin_44675404的博客 493

JavaSE-多线程

这里写自定义目录标题学习主题:JavaSE-多线程学习前言:线程实现:线程的状态: 多线程 学习主题:JavaSE-多线程 多线程的本质就是多条路径同时执行 学习前言: 1.一条路径 程序按顺序执行,线程安全,但是CPU利用率低 2.两条路径 即为多线程,可以并行执行,但是存在线程不安全问题 3.进程 线程是操作系统的运行调度最小单位,是进程的运行单位 a:一个进程可以有多个线程 b:一个进程中的线程共享相同的内存单元 4.线程的优缺点 a:资源利用率高,程序响应快,程序设计存在便利 b:设计复杂(复

weixin_44158590的博客 465
上一篇: 框架学习(四)Spring框架之SSH的整合开发
下一篇: 第三章 SpringBoot高级话题
一朝游
博客等级 码龄8年 0粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值