【并发编程】【3】Java线程 创建线程与线程运行

news2024/9/29 17:23:07

并发编程

3.Java线程

本章内容

  • 创建和运行线程

  • 查看线程

  • 线程 API

  • 线程状态

3.1 创建和运行线程

方法一,直接使用 Thread

// 创建线程对象
Thread t = new Thread() {
 public void run() {
 	// 要执行的任务
 }
};
// 启动线程
t.start();

例如:

// 构造方法的参数是给线程指定名字,推荐
Thread t1 = new Thread("t1") {
  @Override
  // run 方法内实现了要执行的任务
  public void run() {
   log.debug("hello");
  }
};
t1.start();

输出:

19:19:00 [t1] c.ThreadStarter - hello

请添加图片描述

方法二,使用 Runnable 配合 Thread

把【线程】和【任务】(要执行的代码)分开

  • Thread 代表线程

  • Runnable 可运行的任务(线程要执行的代码)

Runnable runnable = new Runnable() {
 public void run(){
 // 要执行的任务
 }
};
// 创建线程对象
Thread t = new Thread( runnable );
// 启动线程
t.start();

例如:

// 创建任务对象
Runnable task2 = new Runnable() {
 @Override
 public void run() {
 log.debug("hello");
 }
};
// 参数1 是任务对象; 参数2 是线程名字,推荐
Thread t2 = new Thread(task2, "t2");
t2.start();

输出:

19:19:00 [t2] c.ThreadStarter - hello

请添加图片描述

Java 8 以后可以使用 lambda 精简代码

// 创建任务对象
Runnable task2 = () -> log.debug("hello");
// 参数1 是任务对象; 参数2 是线程名字,推荐
Thread t2 = new Thread(task2, "t2");
t2.start();

@FunctionalInterface

Alt+Enter : IDEA中自动简化快捷键

对比:

请添加图片描述

原理之Thread与Runnable的关系

分析 Thread 的源码,理清它与 Runnable 的关系

小结

  • 方法1 是把线程和任务合并在了一起,方法2 是把线程和任务分开了

  • 用 Runnable 更容易与线程池等高级 API 配合

  • 用 Runnable 让任务类脱离了 Thread 继承体系,更灵活

  • 组合大于继承

请添加图片描述

方法三,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);

输出:

19:22:27 [t3] c.ThreadStarter - hello
19:22:27 [main] c.ThreadStarter - 结果是:100

请添加图片描述

3.2 观察多个线程同时运行

主要是理解

交替执行

谁先谁后,不由我们控制,任务调度器控制

单核不建议

请添加图片描述

3.3 查看进程线程的方法

windows

  • 任务管理器可以查看进程和线程数,也可以用来杀死进程

请添加图片描述

  • tasklist 查看进程

请添加图片描述

  • taskkill 杀死进程

taskkill /F /PID 28060

请添加图片描述

linux

  • ps -fe 查看所有进程

  • ps -fT -p 查看某个 进程(PID)的所有线程

  • kill 杀死进程

请添加图片描述

  • top 按大写 H 切换是否显示线程

  • top -H -p 查看某个进程(PID)的所有线程

请添加图片描述

Java

  • jps 命令查看所有 Java 进程

请添加图片描述

  • jstack 查看某个 Java 进程(PID)的所有线程状态

请添加图片描述

Jconsole 来查看某个 Java 进程中线程的运行情况(图形界面)

请添加图片描述

请添加图片描述
请添加图片描述

Jconsole 远程监控配置

  • 需要以如下方式运行你的 java 类
java -Djava.rmi.server.hostname=`ip地址` -Dcom.sun.management.jmxremote -
Dcom.sun.management.jmxremote.port=`连接端口` -Dcom.sun.management.jmxremote.ssl=是否安全连接 -
Dcom.sun.management.jmxremote.authenticate=是否认证 java类

请添加图片描述

  • 修改 /etc/hosts 文件将 127.0.0.1 映射至主机名

如果要认证访问,还需要做如下步骤

  • 复制 jmxremote.password 文件

  • 修改 jmxremote.password 和 jmxremote.access 文件的权限为 600 即文件所有者可读写

  • 连接时填入 controlRole(用户名),R&D(密码)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/349029.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

程序员必备的软技能-金字塔原理拆解

前言 日常工作中&#xff0c;常常因为思维、表达方式不对产生不想要的结果&#xff1a; 写了一个小时的周报&#xff0c;领导却不满意&#xff1f;跟团队讲了半天自己的想法&#xff0c;可别人就是没理解&#xff1f;看了很多知识、信息&#xff0c;却一点也没记住&#xff1…

【分享】如何通过集简云将ChatGPT人工智能接入到您的抖音中?

ChatGPT是一款非常强大的人工智能产品&#xff0c;可以有创造性的回复和创作文字&#xff0c;图片&#xff0c;适用于很多办公场景。这篇文章将介绍如何将ChatGPT接入到我们的抖音中。 在集简云中的ChatGPT应用 目前集简云提供了两个ChatGPT应用: OpenAI(ChatGPT&#xff09;…

OpenCV实战(11)——形态学变换详解

OpenCV实战&#xff08;11&#xff09;——形态学变换详解0. 前言1. 腐蚀和膨胀运算1.1 腐蚀和膨胀基础1.2 使用形态学滤波器执行图像腐蚀和膨胀运算2. 开运算和闭运算2.1 使用形态学滤波器执行图像开运算和闭运算3. 形态学变换应用3.1 使用形态学滤波器检测边缘3.2 使用形态学…

跨平台应用开发进阶(五十五):uni-app 实现内容分享

文章目录一、前言二、系统分享组件三、uniShare SDK调用四、拓展阅读一、前言 APP开发过程中&#xff0c;需要实现分享功能。 常用的分享实现方法包括&#xff1a; 系统分享组件&#xff1b;uniShare SDK调用&#xff1b; 二、系统分享组件 uni.shareWithSystem(OBJECT)调…

jvisualvm安装Visual GC插件以及连接远程应用监控jvm【杭州多测师_王sir】【杭州多测师】...

一)jvisualvm工具安装Visual GC插件 1、在本地jdk安装路径找到jvisualvm.exe双击打开 2、选择工具-插件-勾选visual GC 如果显示重试&#xff0c;先点击设置-编辑-选择你本地对应的JDK版本的URL&#xff1a;https://visualvm.github.io/pluginscenters.html 3、点击远程-添加远…

CSS系统学习总结

目录 CSS边框 CSS背景 CSS3渐变 线性渐变&#xff08;Linear Gradients&#xff09;- 向下/向上/向左/向右/对角方向 语法 线性渐变&#xff08;从上到下&#xff09; 线性渐变&#xff08;从左到右&#xff09; 线性渐变&#xff08;对角&#xff09; 使用角度 使用多…

博视像元获近5000万元融资,主攻半导体前道及锂电高端部件供应

这两年各大车企与电池厂商都在快速新建产能&#xff0c;尤其上游原材料成本大增&#xff0c;反映到产业链上巨头都在寻求增效&#xff0c;高端制造技术投入也大幅增长。比如这家&#xff0c;高端工业相机提供商「博视像元」近期宣布完成近5000万的天使加轮融资&#xff0c;投资…

指针——“C”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰学习的内容是指针&#xff0c;这次只会讲一些很简单的知识点&#xff0c;更详细的指针知识会在以后的博客中逐步剖析清楚&#xff0c;那么现在&#xff0c;就让我们进入指针的世界吧 指针是什么 指针和指针类型 野指…

Spring 如何解决循环依赖?

什么是循环依赖 &#xff1f; 一个或多个对象之间存在直接或间接的依赖关系&#xff0c;这种依赖关系构成一个环形调用&#xff0c;有下面 3 种方式。 我们看一个简单的 Demo&#xff0c;对标“情况 2”。 Service public class Louzai1 {Autowiredprivate Louzai2 louzai2;…

基于OpenAI搭建自己的ChatGPT环境1

基于OpenAI搭建自己的ChatGPT环境1基于OpenAI搭建自己的ChatGPT环境注册账号生成访问密钥创建虚拟环境安装openai模块环境体验笔者初次接触人工智能领域&#xff0c;文章中错误的地方还望各位大佬指正&#xff01; 基于OpenAI搭建自己的ChatGPT环境 ChatGPT是OpenAI研发的人机…

Java基础之网络编程介绍详尽笔记

目录初识网络编程网络传输模型网络传输协议UDPUDP通信程序UDP的三种通信方式TCPTCP通信协议TCP的三次握手TCP的四次挥手初识网络编程 网络编程三要素 IP 设备在网络中的地址&#xff0c;是唯一的标识。 端口号 应用程序在设备中唯一的标识。 协议 数据在网络中传输的规则&…

童年回忆--扫雷(包括标记功能和递归展开)--万字讲解让你学会扫雷制作

魔王的介绍&#xff1a;&#x1f636;‍&#x1f32b;️一名双非本科大一小白。魔王的目标&#xff1a;&#x1f92f;努力赶上周围卷王的脚步。魔王的主页&#xff1a;&#x1f525;&#x1f525;&#x1f525;大魔王.&#x1f525;&#x1f525;&#x1f525; ❤️‍&#x1…

第九章:创建用户和用户权限

Windows&#xff1a;创建用户&#xff1a;第一种方法创建用户&#xff1a;先点右上角的工具&#xff0c;然后点击AD用户和计算机双击skills.com打开目录&#xff0c;再双击Users&#xff0c;进入文件夹中在右框中右击空白处&#xff0c;新建用户填充好用户信息后点击下一步然后…

Sophos防火墙日志管理

每天&#xff0c;Sophos防火墙都会生成大量的syslog数据&#xff0c;很难独自监控它们。借助EventLog Analyzer&#xff0c;您可以存档系统日志以满足合规性要求&#xff0c;并进行彻底的取证调查&#xff0c;以在发生任何问题&#xff08;例如网络入侵&#xff09;时获得宝贵的…

MySQL用户管理

文章目录MySQL用户管理用户用户信息创建用户修改用户密码删除用户数据库的权限MySQL中的权限给用户授权回收权限MySQL用户管理 与Linux操作系统类似&#xff0c;MySQL中也有超级用户和普通用户之分。如果一个用户只需要访问MySQL中的某一个数据库&#xff0c;甚至数据库中的某…

Unity 资源插件 Agents Navigation 3.1.1.unitypackage

Unity 插件 Agents Navigation 3.1.1.unitypackage 描述 这个软件包包括高性能、模块化和可扩展的代理导航。它是以 DOTS 为核心开发的&#xff0c;因此充分利用了 Unity 的最新技术栈&#xff0c;如 SIMD 数学、Jobs、Burst 编译器和 EntityComponentSystem。此外&#xff0c;…

【ASP.NET】原生JavaScript加Asp.net实现多图片上传

记录一下&#xff0c;Javascript加asp.net实现多文件上传的方法。首先看一下要实现的功能&#xff0c;图片比文字描述更直观。 一、前台代码 前台代码代码分为三个部分&#xff0c;一是HTML代码&#xff0c;二是Style样式代码&#xff0c;三是Javascript代码。 1.html代码 …

亿级高并发电商项目-- 实战篇 --万达商城项目 八(安装FastDFS、安装Nginx、文件服务模块、文件上传功能、商品功能与秒杀商品等功能)

专栏&#xff1a;高并发---分布式项目 &#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、微信支…

C语言进阶——自定义类型:枚举、联合

&#x1f307;个人主页&#xff1a;_麦麦_ &#x1f4da;今日名言&#xff1a;如果不去遍历世界&#xff0c;我们就不知道什么是我们精神和情感的寄托&#xff0c;但我们一旦遍历了世界&#xff0c;却发现我们再也无法回到那美好的地方去了。当我们开始寻求&#xff0c;我们就已…

2023春招java面试题及答案

2023春招java面试题及答案总结1.以下Dubbo服务负载均衡策略中&#xff0c;哪一个策略的功能是相同参数的请求总是发到同一个提供者&#xff08;&#xff09;2.如下代码&#xff1a;请问编译运行的结果是什么&#xff1f;3.给出如下代码&#xff1a;请问编译运行的结果是什么&am…