首页 > 编程语言 >并发编程学习笔记1

并发编程学习笔记1

时间:2024-09-03 19:51:59浏览次数:12  
标签:run Thread start 编程 笔记 并发 线程 new sleep

1.线程的创建

        方法一:直接重写Thread类的run方法

Thread t = new Thread() {
     @Override
     public void run() {
     }
};
t.start();

        可简写为:

Thread t3 = new Thread(() -> {});
t.start();

        方法二:使用Runnable配合Thread

Runnable r = () -> {running code...};
Thread t = new Thread(r);
t.start();

        方法三:FutureTask配合Thread

                FutureTask 能够接收 Callable 类型的参数,用来处理有返回结果的情况

// 创建任务对象
FutureTask<Integer> task3 = new FutureTask<>(() -> {
 log.debug("hello");
 return 100;
});

// 参数1 是任务对象; 参数2 是线程名字,推荐
new Thread(task3, "t3").start();

// 主线程阻塞,同步等待 task 执行完毕的结果
Integer result = task3.get();
log.debug("结果是:{}", result);

2.线程上下文切换

        因为以下一些原因导致 cpu 不再执行当前的线程,转而执行另一个线程的代码

  • 线程的 cpu 时间片用完
  • 垃圾回收
  • 有更高优先级的线程需要运行
  • 线程自己调用了 sleep、yield、wait、join、park、synchronized、lock 等方法

3.常见方法

  • start和run

        直接调用run会在当前同一线程执行,没有启用新的线程

        使用 start 是启动新的线程,通过新的线程间接执行 run 中的代码

  • yield和sleep

        sleep

1. 调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态(阻塞)

2. 其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException

3. 睡眠结束后的线程未必会立刻得到执行

4. 建议用 TimeUnit 的 sleep 代替 Thread 的 sleep 来获得更好的可读性

        yield

 调用 yield 会让当前线程从 Running 进入 Runnable 就绪状态,然后调度执行其它线程 

标签:run,Thread,start,编程,笔记,并发,线程,new,sleep
From: https://blog.csdn.net/Thehao123/article/details/141830191

相关文章

  • 2-SAT 学习笔记
    一、简介k-SAT(satisfiability)解决这样一类问题:给定\(n\)个布尔变量和\(m\)条限制,每条限制形如\(x_1=0/1\or\cdots\orx_n=0/1\),求是否有解并给出构造。当\(k\gt2\)时,该问题为NP完全问题。二、算法流程在学习本算法前,请确保你对有向图强连通分量有一定了解。例......
  • C++学习笔记(大白话版)
     函数重载:名字一样,参数不一样 同一个小区,不同的家庭在小区中住不同的房子 缺省参数:写函数的时候故意不把参数写完,但是只能不写左边的,右边的必须写 如果在使用有缺省参数的函数时,给了实参值,那么就优先调用实参值 如果没有给实参,就可以用默认参数了。 函数定......
  • Java 入门指南:Java 并发编程 —— 并发容器 ConcurrentSkipListMap
    ConcurrentMapConcurrentMap是Java并发包中提供的一个接口,它继承了java.util.Map接口,专门用于支持高并发环境下的线程安全操作。ConcurrentMap提供了一系列线程安全的方法,旨在解决在多线程环境下使用普通Map类型(如HashMap)时可能出现的竞态条件和数据不一致问题。......
  • zdppy+vue3+onlyoffice文档管理系统实战 20240902 上课笔记 登录功能优化
    遗留问题1、登录以后跳转最近文档2、如果用户没有登录应该自动跳转登录页面3、如果用户的token校验失败,应该自动调整登录界面4、按回车键自动跳转登录页面登录以后跳转最近文档constrouter=useRouter()router.push("/")实际代码:constloginData=awaitapi.login......
  • FastAPI+Vue3零基础开发ERP系统项目实战课 20240831上课笔记 查询参数和分页实现
    回顾获取路径参数什么是路径参数?/user/{id}什么时候使用?需要传递参数怎么实现类型转换?声明参数的类型怎么捕获文件路径?{file_path:path}什么是查询参数查询字符串是键值对的集合,这些键值对位于URL的?之后,以&分隔。http://127.0.0.1:8000/items/?skip=0&limit=10......
  • prometheus学习笔记之集群内服务发现环境准备
    一、环境介绍主要演示prometheus在k8s集群中如何通过服务自动去发现k8s集群自有服务及其他服务发现场景,后续会演示集群外部署prometheus自动发现k8s服务并获取数据创建监控使用的namespaceskubectlcreatensmonitoring配置docker可以下载镜像[root@k8s-masterdeploy]......
  • 高效并发编程:使用Python线程池执行任务
    高效并发编程:使用Python线程池执行任务在现代软件开发中,处理并发任务是提高程序性能和响应速度的关键技术之一。Python作为一种广泛使用的编程语言,提供了多种并发编程工具,其中线程池(ThreadPool)是一个非常实用的工具。本文将详细介绍如何编写一个函数,使用线程池执行一组任务......
  • 章10——面向对象编程(高级部分)——两种单例模式
    代码如下://单例模式//instance--实例//该篇中记录了饿汉模式和懒汉模式publicclassHungryMan{publicstaticvoidmain(String[]args){Single01.say();Single02.say();}}classSingle01{//只能有instance这一个实例。privateS......
  • C安全编程教学-声明和初始化-不要声明或者定义保留标识符(三)
    注:本课程参考文献《C安全编码标准》 欢迎关注我......
  • 二、并发编程与多线程-2.1、J.U.C和锁(中篇)
    2.1、J.U.C和锁(中篇)2.1.4、什么是CAS?答:CAS是Java中Unsafe类里面的方法,全称是CompareAndSwap,是比较并交换的意思。作用就是保证在多线程环境下,对于修改共享变量操作的原子性。扩展:CAS保证修改共享变量操作原子性的实现逻辑:CAS方法里有三个参数,依次分别是共享变量的内......