首页 > 系统相关 >JUC并发编程学习笔记(一)认知进程和线程

JUC并发编程学习笔记(一)认知进程和线程

时间:2023-11-02 18:02:08浏览次数:33  
标签:JUC java 编程 并发 线程 sleep cpu wait

进程和线程

进程

一个程序,如QQ.exe,是程序的集合

一个进程往往可以包含多个线程,至少包含一个

java默认有两个线程,GC垃圾回收线程和Main线程

线程:一个进程中的各个功能

java无法真正的开启线程,因为java是运行在虚拟机上的,所以只能通过C++,通过native本地方法调用C++开启线程

private native void start0();

并发、并行

并发:多线程操作同一资源

  • cpu单核情况下,通过快速交替模拟多条线程

并行:多个线程一起行走

  • 只有在cpu多核情况下才可能产生并行,多个线程同时进行,cpu核数决定最大并行量。线程池

并发编程的本质就是想要充分利用电脑的cpu资源

线程有几个状态

java中的Thread.State重点列举了线程的状态,其中有6中状态

public enum State {
    //新增
        NEW,
	//运行
        RUNNABLE,
    //阻塞
        BLOCKED,
    //等待,死等
        WAITING,
    //超时等待
        TIMED_WAITING,
    //终止
        TERMINATED;
    }

wait/sleep的区别

  1. 来自不同的类

    wait->Object类

    sleep->Thread类

  2. 关于锁的释放
    wait会将锁释放、sleep不会释放锁,抱着锁睡觉

  3. 使用的范围是不同的
    wait必须在同步代码块中使用
    sleep可以在任何地方使用

  4. 是否需要捕获异常
    wait不需要捕获异常,由于在同步代码块中,所以不存在超市等待的问题
    sleep必须要捕获异常,可能会发生超时等待的问题

    只要是线程都会有一个异常,那就是中断异常

标签:JUC,java,编程,并发,线程,sleep,cpu,wait
From: https://www.cnblogs.com/nhgtx/p/17805941.html

相关文章

  • 定时任务@Scheduled之单线程多线程问题
    现象在一个类内,写了两个定时任务,发现它们竟然是串行执行的。于是想到,@Scheduled该不会是单线程执行折吧?于是找了一下,发现还真的是。。。可参考:https://blog.csdn.net/Mr_EvanChen/article/details/103408290解决方案1、ScheduledTaskRegistrar有一个setScheduler()方......
  • (四)C#编程基础复习——运算符
    运算符其实就是一个符号,用来告诉编译器执行特定的数学或者逻辑运算。C#中内置了丰富的运算符,大致可以分为以下几类:一、算术运算符算术运算符即完成特定算术运算的符号,例如加、减、乘、除、余等,如下图所示:inta=10;intb=20;Console.WriteLine("a+b={0}",a+b);Console.W......
  • 终于有人把进程与线程讲清楚了
    前言很多人对进程、线程没有什么概念,面试的时候也说不出其中的核心内涵。所以,今天我打算花点篇幅把进程和线程讲清楚。01CPU与内存**CPU**大家都知道是计算机的中央运算单元,用来计算的。CPU从内存里面读取一条一条的代码指令,然后根据指令来执行运算(加,减,乘,除,复制数据等)。......
  • 【转载】CUDA编程学习记录 C++
    参考Yuezero的CUDA编程基础(https://blog.csdn.net/weixin_54338498/article/details/127947551)CUDA编程模型host指代CPU及其内存,包含host程序device指代GPU及其内存,包含device程序经典CUDA程序的执行流程如下:分配host内存,并进行数据初始化;分配device内存,并从host将......
  • (三)C#编程基础复习——数据类型
    C#语言中内置了一些基本的数据类型,数据类型用来指定程序中变量可以存储的数据的类型,C#中的数据类型可以大致分为三类:值类型(Valuetypes);引类型(Referencestypes);指针类型(Pointertypes);一、值类型值类型顾名思义就是有带数值的类型,C#中的值类型有非常多,值类型变量声明后,不......
  • 模拟实现.net中的Task机制:探索异步编程的奥秘
    .net中使用Task可以方便地编写异步程序,为了更好地理解Task及其调度机制,接下来模拟Task的实现,目的是搞清楚:Task是什么Task是如何被调度的基本的Task模拟实现从最基本的Task用法开始Task.Run(Actionaction)这个命令的作用是将action作为一项任务提交给调度器,调度器会安排......
  • 系统编程:控制文件I/O的内核缓冲之sync(),fsync()和fdatasync()
        通过系统编程:从write()和fwrite()谈开来我们知道了系统调用和glibc库函数为了提升性能而设立的缓冲区,那么,什么情况下数据会从上一次缓冲区刷新到下一层存储介质(可能是缓冲区,也可能是永久存储介质)呢?fflush()库函数提供了强制将stdio库函数缓冲区数据刷新到内核缓冲......
  • 实验3 C语言函数应用编程
    任务1源码1#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#include<windows.h>5#defineN806voidprint_text(intline,intcol,chartext[]);//函数声明7voidprint_spaces(intn);//函数声明8voidprint_bl......
  • 飞腾派使用内核态编程完成LED20控制操作
    1基础知识在该程序设计过程中我们首先需要学习如何在内核态编程。1.1内核态编程在内核态中编写C语言程序和在用户态中编写C语言程序不同,在用户态中编写C语言程序,我们可以使用libc库,通过系统调用访问内核态的相关操作。基础的内核态程序如下:#include<linux/init.h>#include......
  • shell编程
    H3目标:1.shell是什么2.shell脚本是什么3.理解为什么学习shell脚本4.shell解析器linux系统使用内核操作计算机硬件,通过编写shell命令发送给linux内核去执行,操作计算机硬件,shell是用户操作计算机硬件的桥梁,shell是指令shell是一门设计语言H5shell脚本就是通过shell命......