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

并发编程。

进程


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

2.进程的几个概念


1 结构特性
为了控制和管理进程,系统为每个进程设立一个**进程控制块\- PCB。
2 动态性
进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的,进程在其生命周期内,在三种基本状态(产生、执行、消亡)之间转换。
3 异步性
由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。
4.并发性
任何进程都可以同其他进程一起向前推进。
5.独立性
进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。


3 线程


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

4.线程和进程的区别

5.线程的切换方式

6.线程生命周期

7.线程创建

 7.1 继承Thread类

public class ThreadDemo01 extends Thread {
@Override
public 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


2.实现Runnable接口

public class ThreadDemo01 implements Runnable {
@Override
public 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

3.实现Callable接口

public class ThreadDemo01 implements Callable<Integer> {
@Override
public 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

8.线程就绪

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

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

2.线程阻塞

(1) sleep(n)
(2) join()
(3) yield()
(4) wait

3.线程死亡

9.守护线程和用户线程

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

1.用户线程

创建的线程

2.守护线程

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();


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

相关文章:

  • 【学习复盘】相关资料
  • QT 自定义可拖动缩放的无边框窗口,可用于mainmindow, widget
  • WebGL性能分析与优化
  • 24/9/24 算法笔记 超参数优化算法
  • QT客户端发送HTTP请求此时服务器到底收到了哪些数据?
  • 解决Mac 默认设置 wps不能双面打印的问题
  • yum库 docker的小白安装教程(附部分问题及其解决方案)
  • 翻译:openmax文档
  • 从 Oracle 集群到单节点环境(详细记录一次数据迁移过程)之一:生产环境与目标服务器详情
  • 今日指数项目之大盘指数功能实现
  • 每日算法1(快慢指针)
  • nginx如何拦截未经授权的跳转
  • BUUCTF [SCTF2019]电单车详解两种方法(python实现绝对原创)
  • Codeforces Global Round 19 D题 Yet Another Minimization Problem(推式子,01背包变形)
  • 模拟哈希表
  • LVGL第一篇-了解lvgl显示原理以及使用C++移植
  • Zookeeper
  • BERT训练环节(代码实现)
  • Seata分布式事务实践
  • Allegro视频去除走线的小方块