当前位置: 首页 > news >正文

java并发编程

力扣

2390. 从字符串中移除星号

给你一个包含若干星号 * 的字符串 s

在一步操作中,你可以:

  • 选中 s 中的一个星号。
  • 移除星号 左侧 最近的那个 非星号 字符,并移除该星号自身。

返回移除 所有 星号之后的字符串**。**

注意:

  • 生成的输入保证总是可以执行题面中描述的操作。
  • 可以证明结果字符串是唯一的

线程与进程

业务场景:小明去理发店理发。

小明去理发店理发,完成理发需要吹,剪,洗、理的过程。由这个场景我们引用进程和线程这两个概念。

img

进程

什么是进程?

进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位。进程是可与其他程序并发执行的程序,在一个数据集合上的运行过程。它是系统进行资源分配和调度的一个独立单位。

大家打开windows的任务管理器就可以看到,系统运行的进程。

image-20240914222537989

进程的几个概念

结构特性

为了控制和管理进程,系统为每个进程设立一个**进程控制块\- PCB。

动态性

进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的,进程在其生命周期内,在三种基本状态(产生、执行、消亡)之间转换。

异步性

由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。

并发性

任何进程都可以同其他进程一起向前推进。

独立性

进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。

线程

我们把理发这个进程分解为几个子任务(线程)如下:

img

线程的定义

  1. 线程是程序执行的**最小单位\,而进程是操作系统分配资源的最小单位;
  2. 一个进程由一个或多个线程组成,线程是一个进程中代码的**不同执行路线\;
  3. 进程之间相互独立,但同一进程下的**各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源(如打开文件和信号等),某进程内的线程在其他进程不可见;
  4. 调度和切换:线程上下文切换比进程**上下文切换要快得多\;

线程和进程的区别

img

线程的切换方式

img

线程生命周期

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

线程创建

继承Thread类
public class ThreadDemo01 extends Thread {	@Overridepublic void run() {for(int i =0;i<10;i++) {System.out\.print(this.getName()+":"+i);}}
}public static void main(String[] args) {new ThreadDemo01().start();
}

程序运行结果:

Thread-0:0
Thread-0:1
Thread-0:2
Thread-0:3
Thread-0:4
Thread-0:5
Thread-0:6
Thread-0:7
Thread-0:8
Thread-0:9
实现Runnable接口
public class ThreadDemo01 implements Runnable {	@Overridepublic void run() {for(int i =0;i<10;i++) {System.*out\*.println(Thread.*currentThread*().getName()+":"+i);}}public static void main(String[] args) {new Thread(new ThreadDemo01()).start();}
}                             
Thread-0:0
Thread-0:1
Thread-0:2
Thread-0:3
Thread-0:4
Thread-0:5
Thread-0:6
Thread-0:7
Thread-0:8
Thread-0:9
实现Callable接口
public class ThreadDemo01 implements Callable<Integer> {@Overridepublic Integer call() throws Exception {int sum = 0;for (int i = 1; i < 1000; i++) {sum += i;}return sum;
}
public static void main(String[] args) throws Exception {FutureTask<Integer> ft =new FutureTask<Integer>(new ThreadDemo01());ft.run();System.*out\*.println("s:" + ft.get());}
}

程序运行结果:

s:499500

线程就绪

img

Thread  t = new Thread( );
t.start( ); //启动线程(线程就绪)

线程运行

一旦CPU分配了运行时间,就调用线程的run( )方法。

img

线程阻塞

img

(1) sleep(n)

(2) join()

(3) yield()

(4) wait()

线程死亡

img

守护线程和用户线程

守护最后一个用户线程才结束。

用户线程

创建的线程

守护线程

public static void main(String[] args) {
Thread t1 = new Thread(() -> {while (true) {try {Date d = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd hh:mm:ss");System.out.println(sdf.format(d));Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}
});Thread t2 = new Thread(()->{for(int i=0;i<100;i++){try {System.out.println("我是许则"+i);Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}}
});t1.setDaemon(true);
t1.start();
t2.start();

i++){
try {
System.out.println(“我是许则”+i);
Thread.sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
});

t1.setDaemon(true);
t1.start();
t2.start();


http://www.mrgr.cn/news/33250.html

相关文章:

  • 如何查看本机配置了哪些端口转发
  • 【alluxio编译报错】Some files do not have the expected license header
  • linux 的 sed 命令的 使用学习
  • API接口在金融科技领域的创新应用
  • 前后端跨域问题及其在ThinkPHP中的解决方案
  • 树及二叉树(选择题)
  • XML/HTML:深入解析与比较
  • 软考高级:数据库关系模式推理规则 AI 解读
  • 如何用JS实现退出登录?
  • [leetcode]62_不同路径
  • 【OSS安全最佳实践】对OSS表格文件中的敏感数据进行脱敏
  • Linux之实战命令03:stat应用实例(三十七)
  • 使命召唤游戏助手系统小程序的设计
  • ICM20948 DMP代码详解(36)
  • 基于Java springboot+mybatis 网上商城系统
  • 模板初阶(c++)
  • 【软件资料集】系统培训方案(Word项目参考2024)
  • 面对外行同事对你的工作指手画脚,但说不到点子上的情况,可以采取以下策略来有效合作
  • 图书管理系统小程序的设计
  • 【Python】探索 TensorFlow:构建强大的机器学习模型