Java语法学习线程基础

Java语法学习线程基础

大纲

  1. 概念
  2. 创建线程
  3. 线程终止
  4. 常用方法
  5. 用户线程和守护线程
  6. 线程的七大状态
  7. 线程的同步
  8. 互斥锁
  9. 线程死锁
  10. 释放锁

具体案例

1.概念

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 创建线程

在这里插入图片描述
第一种:

class Cat extends Thread {int time = 0;@Overridepublic void run() {while (true) {System.out.println("只不过是些许风霜罢了" + time++);try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}if (time == 6){break;}}}
}

调用star方法开启支线程,如果不用star,直接调用run方法,那么相当于一个主线程的普通的方法,会让主线程按照顺序执行下去
而开启支线程,主线程和支线程是分开独立,互不影响,当所有线程结束了,退出进程

第二种:
在这里插入图片描述
调用方法不同。需要创建一个Thread,再把我们实现线程的类传入后,再调用Thread方法的start

public class test1 {public static void main(String[] args) {Cat cat = new Cat();Thread thread = new Thread(cat);thread.run();}
}

区别

在这里插入图片描述
实现接口,可以实现只创建一个对象,但是创建多个多个线程来操作
而继承类,必须把共同资源设置为静态共享,然后创建多个对象来调用star方法

3. 线程终止

通过在我们的线程里面设置一个变量来控制线程的运行,然后在其它线程或主线程来控制这个变量

public class SellTicket {public static void main(String[] args) throws InterruptedException {Win1 win = new Win1();Thread thread = new Thread(win);thread.start();Thread.sleep(10 * 1000);win.setLoop(false);}
}
class Win1 implements Runnable{private static int num1 = 200;private boolean loop = true;//设置循环的变量,在主函数控制循环@Overridepublic void run() {while (loop) {try {Thread.sleep(50);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("窗口" + Thread.currentThread().getName() + "卖出还剩" + --num1 + "张票");}}public boolean isLoop() {return loop;}public void setLoop(boolean loop) {this.loop = loop;}
}

4. 常用方法

在这里插入图片描述
对于第八点:
中断线程睡眠并抛出一个异常在这里插入图片描述
在这里插入图片描述
对于yield:
只会在CPU紧张时,才回进行让步,其余不会

在线程执行时,如果其它线程.join(),那么会等其它线程执行完,再执行本线程

如下:
先执行主线程
当i = 3时,停止执行主线程,执行子线程thread,执行完成后,继续执行主线程

public static void main(String[] args) throws InterruptedException {Win1 win = new Win1();Thread thread = new Thread(win);thread.start();for (int i = 0; i < 5; i++) {System.out.println("主线程" + i);Thread.sleep(2000);if (i == 3){thread.join();}}}

5. 用户线程和守护线程

在这里插入图片描述
守护线程,在用户线程执行完之后,自己也会终止执行
换言之,当只剩下守护线程的时候就自动停止执行了
设置守护线程使用setDaemon

 Win1 win = new Win1();Thread thread = new Thread(win);thread.setDaemon(true);thread.start();

6. 线程的七大状态

在这里插入图片描述
在这里插入图片描述

7. 线程的同步

在这里插入图片描述
在这里插入图片描述

8. 互斥锁

在这里插入图片描述
对于第七点:
对于非静态的同步方法,锁可以是this,也可以是其他对象

public  void sell() {synchronized (this) {try {Thread.sleep(100);} catch (InterruptedException e) {System.out.println(" ");}if (num1 <= 0) {loop = false;return;}System.out.println(Thread.currentThread().getName() + "还剩" + num1-- + "票");}}

对于第八点:
如果类里面已经出现了静态的同步方法,那么这个锁就作用于这个类上,此时的非静态的方法,如果要实现同步的话,需要synchronized(这个类名.class)
在这里插入图片描述

public  synchronized static void knock(){System.out.println("静态已经被锁了");}public  void sell() {synchronized (Win1.class) {System.out.println();}}

9. 线程死锁

在这里插入图片描述
举例:
在这里插入图片描述

10.释放锁

四种情况
在这里插入图片描述

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

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

相关文章

重写Sylar基于协程的服务器(5、IO协程调度模块的设计)

重写Sylar基于协程的服务器&#xff08;5、IO协程调度模块的设计&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务器&#xff08;1、…

C++设计模式-单一职责原则

单一职责原则定义了类的封装规范。&#xff08;封装、继承、多态&#xff09; 定义&#xff1a;有且仅有一个引起类变化的原因。 e.g.1.一个需要重新封装的类 class A { public:void funName() {}void funSex() {}void funAge() {}void funCourse() {}//要重新封装到其他类v…

红日靶场1搭建渗透

环境搭建 下载好镜像文件并解压&#xff0c;启动vmware 这里我用自己的win7 sp1虚拟机作为攻击机&#xff0c;设置为双网卡NAT&#xff0c;vm2 其中用ipconfig查看攻击机ip地址 设置win7 x64为双网卡&#xff0c;vm1&#xff0c;vm2 设置win08单网卡vm1&#xff0c;win2k3为单…

关于python依赖包的问题(番外)

前言: 经常一个项目写完,需要导出他所有的依赖包到另外一个项目里面,那么怎么进行操作呢? 正文: 到处依赖包文件: 在一个Python项目中使用pip freeze > requirements.txt命令是一种常用方式&#xff0c;用以生成一个包含所有已安装Python依赖包及其对应版本的列表文件。…

jupyter notebook更改工作目录的2个细节

详细步骤参考知乎原文&#xff1a; 如何更改Jupyter Notebook的默认工作路径&#xff1f; - 知乎 (zhihu.com​​​​​​) 步骤4中需要删除 #符号和后面的空格&#xff01;一定要删除空格&#xff0c;否则会出现语法错误的报错 步骤5中&#xff0c;经过评论区提醒后&#xf…

蓝桥杯备战——12.PCF8591芯片的使用

目录 1.芯片简介2.读写时序3.控制字4.代码封装库5.原理图分析6.使用示例 1.芯片简介 截取自NXP的PCF8591芯片数据手册&#xff0c;我把重点关注部分划出来了&#xff0c;请务必自行阅读一遍数据手册&#xff01; 2.读写时序 ①器件地址&#xff1a; Bit0决定是读还是写操作&…

Python 数据分析(PYDA)第三版(七)

原文&#xff1a;wesmckinney.com/book/ 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 附录 附录 A&#xff1a;高级 NumPy 原文&#xff1a;wesmckinney.com/book/advanced-numpy 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 此开放访问网络版本的《Pyt…

【Java】小白友好的SpringMVC开发基础学习笔记

目录 简介 Bean加载控制 设置请求映射路径 5种请求类型参数传递 JSON数据传递请求参数 响应 Jackson库处理JSON响应 REST风格 RESTful快速开发 拦截器 简介 Spring MVC是一个强大而灵活的Web应用程序框架&#xff0c;它通过使用MVC架构模式、注解和配置文件来实现请…

作业2.2

一&#xff0e;选择题 1、编写C程序一般需经过的几个步骤依次是&#xff08; B &#xff09; A. 编辑、调试、编译、连接 B. 编辑、编译、连接、运行 C. 编译、调试、编辑、连接 D. 编译、编辑、连接、运行 2、所谓数据封装就是将一组数据和与这组数据有关操作组装在…

ctfshow web-77

开启环境: 先直接用伪协议获取 flag 位置。 c?><?php $anew DirectoryIterator("glob:///*"); foreach($a as $f) {echo($f->__toString(). );} exit(0); ?> 发现 flag36x.txt 文件。同时根目录下还有 readflag&#xff0c;估计需要调用 readflag 获…

魔改冰蝎 —— 绕过检测,自动生成免杀后门

为什么要魔改工具&#xff1f; 生成的代码很容易被监测 生成的后门很容易被杀软杀掉 了解冰蝎流量特征 开启http代理&#xff0c;数据经过BP抓包进行分析数据 冰蝎数据包分析&#xff1a; 1、三个请求头固定 AcceptAccept-LanguageUser-Agent&#xff08;内部有十个&a…

Web3行业研究逐步加强,“链上数据”缘何成为关注焦点?

据中国电子报报道&#xff0c;近日&#xff0c;由中关村区块链产业联盟指导&#xff0c;中国信息通信研究院牵头&#xff0c;欧科云链控股有限公司参与编写的《全球Web3产业全景与发展趋势研究报告&#xff08;2023年&#xff09;》正式发布。研究报告通过全面追踪国内外Web3产…

给mysql设置时区

每次重启MySQL服务器后&#xff0c;使用IDEA的database navigator连接都会出现这种情况 解决方式就是 命令行登录后 set global time_zone 8:00;嘿嘿把之前自家简书文章 给mysql设置时区 搬运过来了&#xff0c;方便查阅

01-Java基础语法

Java基础语法 1. 注释使用的技巧&#xff1a;注意点 2. 关键字2.1 概念2.2 第一个关键字class 3. 字面量区分技巧&#xff1a;扩展&#xff1a; 制表符&#xff1a; 4. 变量4.1 什么是变量&#xff1f;4.2 变量的定义格式4.2.1 格式详解4.2.2 常用的数据类型4.2.3 变量的注意事…

手册前端在线学习网站

电脑重装了&#xff0c;收藏夹没了&#xff0c;在线上记录一下吧&#xff0c;如果有别的好的地址&#xff0c;欢迎在评论区给我&#xff0c;我确认后会同步更新到这里&#xff1b; 前端进阶之旅_刷题-注意收费项目是作者自己的与本人分享无关 React 技术揭秘 Vue 技术揭秘 ES6 …

斗地主登录界面(JAVA图形化界面)设置

1.实现代码 import CodeUtil.CodeUtil; import domain.User;import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList;public class LoginGame extends JFrame implements MouseListen…

MongoDB复制集实战及原理分析

文章目录 MongoDB复制集复制集架构三节点复制集模式PSS模式&#xff08;官方推荐模式&#xff09;PSA模式 典型三节点复制集环境搭建复制集注意事项环境准备配置复制集复制集状态查询使用mtools创建复制集安全认证复制集连接方式 复制集成员角色属性一&#xff1a;Priority 0属…

【数据分享】1929-2023年全球站点的逐月降雪深度数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 之前我们分享过1929-2023年全球气象站点的逐月平均气温数据、逐月最高气温数据…

一副扑克牌一共54张,平均分成2份,求这2份都有2张A的概率。

这是一道高中数学题&#xff0c;此处介绍2个解法&#xff0c;第1个是我喜欢用的快速解法&#xff0c;第2个是公式解法。 1. 我的快速解法 第1张A随便在哪份&#xff0c; ①如果第2张A和第1张A在同一份(概率是26/53)&#xff0c;此时第3、4张牌必须在另一份&#xff0c;此时的…

力扣刷题-55.跳跃游戏

给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 class Solution { publ…