(JAVA)线程
线程的创建
方式一:Thread
public class dome {public static void main(String[] args) {MyThread myThread = new MyThread();myThread.start();for(int i=1;i<=5;i++){System.out.println("主线程"+i);}}
}
public class MyThread extends Thread{@Overridepublic void run() {for(int i=0;i<5;i++){System.out.println("MyThread线程"+i);}}
}
方式二:Runnable
public class dome {public static void main(String[] args) {Runnable r = new MyRunnable();new Thread(r).start();for(int i=1;i<=5;i++){System.out.println("主线程"+i);}}
}
public class MyRunnable implements Runnable{@Overridepublic void run() {for(int i=1;i<=5;i++){System.out.println("MyRunnable"+i);}}
}
方式三:Callable
public class dome {public static void main(String[] args) throws ExecutionException, InterruptedException {//3.创建一个Callable对象Callable c = new MaCallable(100);//4.把Callable对象封装成一个FutureTask对象(任务对象)FutureTask<String> f = new FutureTask<>(c);//作用//1.是一个任务对象,实现了Ruuable类//2.可以用get()方法获取任务执行完后的结果new Thread(f).start();//获取执行完之后的结果//如果此时还未执行完,则在此等待String s = f.get();System.out.println(s);}
}
//1.实现Callable接口
public class MaCallable implements Callable<String> {private int n;public MaCallable(int n){this.n=n;}//2.重写call方法@Overridepublic String call() throws Exception {int sum=0;for(int i=1;i<=n;i++){sum+=i;}return "1-"+n+"的和为:"+sum;}
}
Thread常用方法
public class dome {public static void main(String[] args) throws ExecutionException, InterruptedException {Thread t1 = new MyThread("1号");
// t1.setName("1号");//设置线程名称t1.start();Thread t2 = new MyThread("2号");
// t1.setName("2号");t2.start();Thread t = Thread.currentThread();for(int i=1;i<=5;i++){System.out.println(t.getName()+"线程"+i);}}
}
public class MyThread extends Thread{public MyThread(String name){super(name);}@Overridepublic void run() {Thread t = Thread.currentThread();//用来获取线程名称for(int i=0;i<5;i++){System.out.println(t.getName()+"线程"+i);}}
}
public class dome {public static void main(String[] args) throws ExecutionException, InterruptedException {for(int i=1;i<=5;i++){if(i==3){//休眠5秒Thread.sleep(5000);}System.out.println(i);}//join:让当前线程先跑完Thread t1 = new MyThread("1号");t1.start();t1.join();Thread t2 = new MyThread("2号");t2.start();Thread t3 = new MyThread("3号");t3.start();t2.join();}
}
线程同步
线程安全
线程同步的几种方式
1.同步代码块 (比2好)
public void dr(int n) {String name = Thread.currentThread().getName();synchronized (this) {//实力方法建议用this,静态方法建议用。classif(n<=num){System.out.println(name+"取钱"+n);num-=n;System.out.println(name+"剩"+num);}else {System.out.println(name+"不足");}}}
2.同步方法(可读性好)
public synchronized void dr(int n) {String name = Thread.currentThread().getName();if(n<=num){System.out.println(name+"取钱"+n);num-=n;System.out.println(name+"剩"+num);}else {System.out.println(name+"不足");}}
3.Lock锁
private final Lock l = new ReentrantLock();public synchronized void dr(int n) {String name = Thread.currentThread().getName();//加锁try {l.lock();if(n<=num){System.out.println(name+"取钱"+n);num-=n;System.out.println(name+"剩"+num);}else {System.out.println(name+"不足");}} catch (Exception e) {throw new RuntimeException(e);} finally {//防止程序出错时不能解锁//解锁l.unlock();}}
线程池
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
1.corePoolSize:线程池的核心线程数量
2.maximumPoolSize:线程池的最大线程数量(多出的为临时线程)
3.keepAliveTime:临时线程的存活时间
4.unit:临时线程存活时间的单位
5.workQueue:线程池的任务队列
6.threadFactory:指定线程池的线程池的线程工厂
7.handler:线程池的拒绝策略
处理Runnable
public class dome {public static void main(String[] args) throws ExecutionException, InterruptedException {/* public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)*/ExecutorService e = new ThreadPoolExecutor(3, 5, 3, TimeUnit.SECONDS,new ArrayBlockingQueue<>(4), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());//LinkedBlockingQueue<>(),链表,无限大小MyThread myThread = new MyThread();e.execute(myThread);e.execute(myThread);e.execute(myThread);e.execute(myThread);e.execute(myThread);e.execute(myThread);e.execute(myThread);//添加临时线程e.execute(myThread);e.execute(myThread);//达到最大值e.execute(myThread);
// e.shutdown();//等线程执行完后,关闭线程
// e.shutdownNow();//直接关闭线程}
}
处理Callable
public class dome {public static void main(String[] args) {/* public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)*/ExecutorService e = new ThreadPoolExecutor(3, 5, 3, TimeUnit.SECONDS,new ArrayBlockingQueue<>(4), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());//LinkedBlockingQueue<>(),链表,无限大小Future<String> f1 = e.submit(new MaCallable(100));Future<String> f2 = e.submit(new MaCallable(200));Future<String> f3 = e.submit(new MaCallable(300));Future<String> f4 = e.submit(new MaCallable(400));try {System.out.println(f1.get());System.out.println(f2.get());System.out.println(f3.get());System.out.println(f4.get());} catch (InterruptedException ex) {System.out.println(ex.getLocalizedMessage());} catch (ExecutionException ex) {System.out.println(ex.getLocalizedMessage());}}
}
相关文章:
(JAVA)线程
线程的创建 方式一:Thread public class dome {public static void main(String[] args) {MyThread myThread new MyThread();myThread.start();for(int i1;i<5;i){System.out.println("主线程"i);}} }public class MyThread extends Thread{Overri…...
【深度学习环境】windows安装 NVIDIA Docker
摘要 不要安装 Docker Desktop!我们将在 Ubuntu 中自行安装 Docker。 请安装 Windows 10 Insider Build 或 Windows 11 (Beta也行)。(稳定发行版无法在 WSL 2 中使用 GPU) 请安装 WSL 2 w/Ubuntu 20.04 或同等版本。…...
【微信小程序】自定义组件(三)
自定义组件 插槽1、什么是插槽2、单个插槽3、定义多个插槽 父子组件之间的通信1、父子组件之间的通信的3种方式2、事件绑定3、behaviors 插槽 1、什么是插槽 在自定义组件的wxml结构中,可以提供一个<solot> 节点(插槽),用…...

Python语言:经典案例分析讲解2
例题1:文件的操作 例题2:调用函数求偶数之和 例题3:调用函数并使用递归的方法求斐波那契数前N项之和 题1: 以只写的模式打开文件test.txt,写入"Python",关闭文件。 代码如下: f open("E:/…...

dbeaver连接别人的数据库没有表
1.概念 非缺省的数据库: 通常是指在一个数据库管理系统(DBMS)中,除了系统默认创建的数据库之外的其他用户创建或自定义的数据库。许多数据库系统在安装后会创建一个默认数据库,例如MySQL中的mysql数据库,…...

EXIT(1)
EXTI介绍 EXTI是片上外设 NVIC是cpu内的外设 回忆起之前的GPIO和AFIO 我们是如何检测按键按下的 我们是一直用while循环读取IDR寄存器的对应位置的值 一直检测判断按键是否被按下 那么是否有第二种方式检测按键是否被按下了呢? 通过EXTI 当EXTI检测到按键的电平发生…...
Qt信号量用于对共享资源进行同步
定义信号量与缓冲区: const int BufferSize 8; int buffer1[BufferSize]; int buffer2[BufferSize]; int curBuf1; //当前正在写入的Bufferint bufNo0; //采集的缓冲区序号quint8 counter0;//数据生成器QSemaphore emptyBufs(2);//信号量:空的缓冲区…...

在报错中学python something
这里写目录标题 动手学深度学习pandas完整代码数据处理TypeError: can only concatenate str (not "int") to str(fillna填补缺失值) 创建文件夹学习这个数据分组get_dummies实现one hot encode 动手学深度学习pandas完整代码 import osimpor…...
如何调用 DBMS_DISKGROUP 对 ASM 文件进行随机读取
目录 一、概述 二、实现思路与注意点 三、Java Demo 1、直接调用 2、读写异步 一、概述 对于 Oracle Rac 环境下,数据文件大多默认存放在 ASM 共享存储上,当我们需要读取 ASM 上存储的数据文件时可以使用 Oracle 提供的一些方法,比如 ASMCMD CP。但是,对于一些备份场景…...
UART学习
uart.c #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h" // UART4_TX : PG11 AF6 // UART4_RX : PB2 AF8 void __uart_init() {// GPIOB2 设置为复用功能GPIOB->MODER & (~(0x3 << 4));GPIOB->MODER | (0x2 << 4);G…...

洗地机哪个牌子最好用?洗地机品牌排行榜
近年来,洗地机相当热门,洗地机结合了扫地拖地吸地为一体的多功能清洁工具,让我们告别了传统方式打扫卫生,让我们清洁不再费劲,可是市面上的洗地机五花八门,怎么挑选到一个洗地机也是一个问题,下…...

国际阿里云:Windows实例中数据恢复教程!!!
在处理磁盘相关问题时,您可能会碰到操作系统中数据盘分区丢失的情况。本文介绍了Windows系统下常见的数据盘分区丢失的问题以及对应的处理方法,同时提供了使用云盘的常见误区以及最佳实践,避免可能的数据丢失风险。 前提条件 已注册阿里云账…...

浅谈二叉树
✏️✏️✏️今天给大家分享一下二叉树的基本概念以及性质、二叉树的自定义实现,二叉树的遍历等。 清风的CSDN博客 😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流&…...
(二) 用QWebSocket 实现服务端和客户端(详细代码直接使用)
目录 前言 一、服务器的代码: 1、服务器的思路 2、具体服务器的代码示例 二、客户端的代码: 1、客户端的思路(和服务器类似) 2、具体客户端的代码示例 前言 要是想了解QWebSocket的详细知识,还得移步到上一篇文…...

关于我在配置zookeeper出现,启动成功,进程存在,但是查看状态却没有出现Mode:xxxxx的问题和我的解决方案
在我输入:zkServer.sh status 之后出现报错码. 报错码: ZooKeeper JMX enabled by default Using config: /opt/software/zookeeper/bin/../conf/zoo.cfgClient port found: 2181. Client address: localhost. Error contacting service. It is probably not runni…...
react及相关面试问题汇总
目录 1、什么是React?它的特点是什么? 2、解释一下虚拟DOM(Virtual DOM)的概念以及它的工作原理。 3、什么是组件(Component)?如何定义一个React组件? 4、什么是JSX?它与HTML的区别是什么?如何在React中…...
QT4到QT5移植出现的一些问题
转自:QT4到QT5移植出现的一些问题_西门子3gl qt5 许可证-CSDN博客 在上述作者基础上修改: 一、问题1:头文件的问题 1、QtGui/QApplication: No such file or directory 1.1错因 原因是Qt5源文件位置的改动 1.2解决 pro文件里࿰…...

【可解释AI】Alibi explain: 解释机器学习模型的算法
Alibi explain: 解释机器学习模型的算法 可解释人工智能简介Alibi特点算法Library设计展望参考资料 今天介绍Alibi Explain,一个开源Python库,用于解释机器学习模型的预测(https://github.com/SeldonIO/alibi)。该库具有最先进的分类和回归模型可解释性算…...

No191.精选前端面试题,享受每天的挑战和学习
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…...
ROS基础—vscode创建工作空间
1、创建ROS工作空间 首先打开ubuntu的终端,接着依次输入如下的命令行; mkdir -p xxx_ws/src(必须得有 src) cd xxx_ws catkin_make当然我一般是新建一个叫做demo的工作空间,如 mkdir -p demo04_ws/src 2、启动vscode cd xxx_ws code . …...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...