当前位置: 首页 > 编程日记 > 正文

Java学习总结:27

多线程常用操作方法

线程的命名与取得

由于多线程的状态不确定,所以线程的名字就成为了唯一的分辨标记,则在定义线程名称时一定要在线程启动之前设置名字,尽量不要重名,且尽量不要为已经启动动的线程修改名字。
由于线程状态的不确定,所以每次可以操作的都是正在执行run()方法的线程,那么取得当前线程对象的方法为:public static Thread current Thread()。
在这里插入图片描述
例:观察线程的命名

package Project.Study.Multithreading;
class MyTread4 implements Runnable{@Overridepublic void run(){System.out.println(Thread.currentThread().getName());//使用currentThread()取得当前线程对象后再取得具体的线程名字}
}
public class Test4 {public static void main(String [] args) throws Exception{MyTread4 mt=new MyTread4();new Thread(mt,"自己的线程A").start();new Thread(mt).start();new Thread(mt,"自己的线程B").start();new Thread(mt).start();new Thread(mt).start();}
}
//结果:
//自己的线程A
//Thread-1
//自己的线程B
//Thread-0
//Thread-2

例:取得线程名字

package Project.Study.Multithreading;
class MyTread4 implements Runnable{@Overridepublic void run(){System.out.println(Thread.currentThread().getName());//使用currentThread()取得当前线程对象后再取得具体的线程名字}
}
public class Test4 {public static void main(String [] args) throws Exception{MyTread4 mt=new MyTread4();new Thread(mt,"自己的线程A").start();new Thread(mt).start();mt.run();}
}
//结果:
//main
//自己的线程A
//Thread-0

通过本程序我们可以发现主方法本身也属于一个线程。
每一个JVM进程都至少启动以下两个线程:
1.main线程:程序的主要执行,以及启动子程序;
2.gc线程:负责垃圾收集。

线程的休眠

线程的休眠指的是让程序的执行速度变慢一些,在Thread类中线程的休眠操作方法为:public static void sleep(long millis)throws InterruptedException,设置的休眠单位是毫秒(ms)。
例:观察休眠特点

package Project.Study.Multithreading;class MyThread5 implements Runnable{@Overridepublic void run(){for (int x=0;x<10;x++){try {Thread.sleep(1000);     		//每次执行休眠1s}catch (InterruptedException e){e.printStackTrace();}System.out.println(Thread.currentThread().getName()+",x="+x);}}
}
public class Test5 {public static void main(String []args){MyThread5 mt1=new MyThread5();MyThread5 mt2=new MyThread5();MyThread5 mt3=new MyThread5();new Thread(mt1,"自己的线程对象A").start();new Thread(mt2,"自己的线程对象B").start();new Thread(mt3,"自己的线程对象C").start();}
}
//结果:
//自己的线程对象B,x=0
//自己的线程对象A,x=0
//自己的线程对象C,x=0
//自己的线程对象A,x=1
//自己的线程对象B,x=1
//自己的线程对象C,x=1
//自己的线程对象B,x=2
//自己的线程对象A,x=2
//自己的线程对象C,x=2
//...
//自己的线程对象C,x=9
//自己的线程对象B,x=9
//自己的线程对象A,x=9

上面这个程序的结果是三个三个输出的(其实是一种错觉),每隔一秒输出三个线程对象,由于线程切换速度过快,所以会有一种所有线程同时进入run()方法中的感觉,而实际上是有先后差距的。

线程优先级

在Java的线程操作中,优先级高的线程就可能先被执行。线程的优先级如下图所示:线程的优先级
线程优先级操作

No.方法或常量类型描述
1public static final int MAX_PRIORITY常量最高优先级,数值为10
2public static final int NORM_PRIORITY常量中等优先级,数值为5
3public static final int MIN_PRIORITY常量最低优先级,数值为1
4public final void setPriority(int new Priority)普通设置线程优先级
5public final int getPriority();普通取得线程优先级

例:设置线程优先级

package Project.Study.Multithreading;class MyThread6 implements Runnable{@Overridepublic void run(){for(int x=0;x<20;x++){try {Thread.sleep(100);}catch (InterruptedException e){e.printStackTrace();}System.out.println(Thread.currentThread().getName()+",x="+x);}}
}
public class Test6 {public static void main(String [] args){MyThread6 mt1 = new MyThread6();Thread t1 = new Thread(mt1,"自己的线程对象A");Thread t2= new Thread(mt1,"自己的线程对象B");Thread t3=new Thread(mt1,"自己的线程对象C");t1.setPriority(Thread.MIN_PRIORITY);t2.setPriority(Thread.MAX_PRIORITY);t3.setPriority(Thread.NORM_PRIORITY);t1.start();t2.start();t3.start();}
}
//结果:
//自己的线程对象C,x=0
//自己的线程对象A,x=0
//自己的线程对象B,x=0
//自己的线程对象A,x=1
//自己的线程对象C,x=1
//自己的线程对象B,x=1
//自己的线程对象C,x=2
//自己的线程对象A,x=2
//自己的线程对象B,x=2
//自己的线程对象B,x=3
//自己的线程对象C,x=3
//自己的线程对象A,x=3
//自己的线程对象B,x=4
//自己的线程对象A,x=4
//自己的线程对象C,x=4
//...
//自己的线程对象C,x=19
//自己的线程对象B,x=19
//自己的线程对象A,x=19

从运行结果可以看出,线程的执行顺序不一定按照设定的优先级执行,这是因为线程不一定能获得cpu资源。

探究:主方法的优先级

public class Test6 {public static void main(String [] args){System.out.println(Thread.currentThread().getPriority());}
}
//结果:
//5

由此可知,主方法的优先级为5

相关文章:

Routing

假如有一个请求&#xff1a;localhost/home/index&#xff0c;那么路由需要做的事情如下&#xff1a; &#xff08;1&#xff09;确定Controller &#xff08;2&#xff09;确定Action &#xff08;3&#xff09;确定其他参数 &#xff08;4&#xff09;根据识别出来的数据&…

2022-2028年中国锂电材料产业投资分析及前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国锂电材料行业市场行业相关概述、中国锂电材料行业市场行业运行环境、分析了中国锂电材料行…

专为物联网开发的开源操作系统Contiki(转)

专为物联网开发的开源操作系统Contiki(转) (2012-04-19 15:31:09)原文网址&#xff1a;http://blog.sina.com.cn/s/blog_6de000c201010z7n.htmlContiki 是一个小型的&#xff0c;开源的&#xff0c;极易移植的多任务电脑操作系统。它专门设计以适用于一系列的内存首先的网络…

【转】ASP.NET Page事件的执行顺序

Page 执行中将按照如下顺序激活事件&#xff1a;Page.PreInitPage.InitPage.InitComplitePage.PreLoadPage.LoadPage.LoadCompletePage.PreRenderPage.PreRenderComplete如果页面从令一个页面继承&#xff0c;如BasePage:System.Web.UI.Page&#xff0c;在BasePage中做了一些扩…

blender动画全面学习教程

大小解压后&#xff1a;31.8G 时长28小时 包含项目文件 1920X1080 MP4 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; Gumroad——活着&#xff01;Blender中的动画课程 云桥网络 平台获取课程&#xff01; 信息: Alive&#xff01;是迄今…

Java学习总结:28

线程的同步和死锁 在程序开发中&#xff0c;所有程序都是通过主方法执行的&#xff0c;而主方法本身就属于一个主线程&#xff0c;所以通过主方法创建的新的线程对象都是子线程。 利用子线程可以进行异步的操作处理&#xff0c;这样可以在不影响主线程运行的前提下进行其他操作…

BZOJ1202: [HNOI2005]狡猾的商人

Description 刁姹接到一个任务&#xff0c;为税务部门调查一位商人的账本&#xff0c;看看账本是不是伪造的。账本上记录了n个月以来的收入情况&#xff0c;其中第i 个月的收入额为Ai(i1,2,3...n-1,n)&#xff0c; 。当 Ai大于0时表示这个月盈利Ai 元&#xff0c;当 Ai小于0时表…

导出swagger2生成的文档

百度了好多篇用法&#xff0c;没法用。特此记录一下 一、下载项目 下载https://github.com/Swagger2Markup/spring-swagger2markup-demo下的项目&#xff0c;保存&#xff0c;注意文件路径不要有中文。我们称这个项目为A项目。 没错这个项目就是专门根据json解析生成文档的。…

把三千行代码重构为15行

2019独角兽企业重金招聘Python工程师标准>>> 如果你认为这是一个标题党&#xff0c;那么我真诚的恳请你耐心的把文章的第一部分读完&#xff0c;然后再下结论。如果你认为能够戳中您的G点&#xff0c;那么请随手点个赞。 把三千行代码重构为15行 那年我刚毕业&#…

一起学WPF系列(2):第一个WPF应用程序

概述 Windows Presentation Foundation (WPF) 是下一代显示系统&#xff0c;用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序。使用 WPF&#xff0c;您可以创建广泛的独立应用程序以及浏览器承载的应用程序。一直以来&#xff0c;我对界面的东西是不怎么感兴趣的&am…

Java学习总结:29

线程间的经典操作案例——生产者与消费者案例 程序基本模型&#xff1a; package Project.Study.Multithreading;class Message{private String title; //保存信息的标题private String content; //保存信息的内容public void setTitle(String title) {this.title title;}…

Blender终极角色创造:从初学者到专业人士

Ultimate character creation in Blender: From beginner to pro 流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;48.0 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |大小解压后:24.8 GB 含建模参考图 |时长…

2022-2028年中国离心机行业市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国离心机行业市场行业相关概述、中国离心机行业市场行业运行环境、分析了中国离心机行业市场…

Shell 十三问 的学习记录

在 BBS上看到了Shell十三问的帖子&#xff0c;由于比较就远了&#xff0c;怕以后再也找不到了&#xff0c;就把笔记贴过来了&#xff0c; 原帖地址&#xff1a; shell 十三问http://bbs.chinaunix.net/thread-2033675-1-1.html 贴出我做的笔记&#xff1a; <一>、为何叫做…

图解八大排序算法——我见过的最详细的讲解(转)

一、分类 1.内部排序和外部排序  内部排序&#xff1a;待排序记录存放在计算机随机存储器中&#xff08;说简单点&#xff0c;就是内存&#xff09;进行的排序过程。外部排序&#xff1a;待排序记录的数量很大&#xff0c;以致于内存不能一次容纳全部记录&#xff0c;所以在排…

UE4创建第一人称射击游戏学习教程 Unreal Engine 4: Create Your Own First-Person Shooter

UE4创建第一人称射击游戏学习教程本课程包含38节视频课&#xff0c;将逐步指导您完成以下主题: 云桥网络 平台获取课程&#xff01; 如何创建6种可定制的武器(包括手枪、突击步枪、猎枪、狙击枪、榴弹发射器和火箭发射器) 如何制作基于命中扫描和投射的武器 如何制作第一人…

PS多形式的部分之间复制“笨办法”

PS剪切页面&#xff0c;有时候你可能会遇到这样的情况&#xff1a;设计改进&#xff0c;但是&#xff0c;我们要具有相同的切片。 在此假设&#xff0c;可以直接用于切割片。我们可以节省大量的时间&#xff0c;又分为片。 但是&#xff0c;人们一般不会在你的上跨片设计PSD在变…

Java学习总结:30

线程的生命周期 suspend()方法&#xff1a;暂时挂起线程&#xff1b; resume()方法&#xff1a;恢复挂起的线程&#xff1b; stop()方法&#xff1a;停止线程。 对于以上三个方法不推荐使用&#xff0c;它们已经被慢慢废除掉了&#xff0c;主要原因是这三个方法在使用时容易产…

SVN优化(一) SVN忽略maven项目的target

SVN优化(一) SVN忽略maven项目的target 一 eclipse刚开始导入的项目: 二 解决办法 方式一&#xff1a; 在项目代码路径,如: F:\xyx\sl 鼠标右键,“TortoiseSVN”-- >“Settings” -->"Subversion"-->"Global ignore pattern" 添加:target *.…

“WPF老矣,尚能饭否”—且说说WPF今生未来(上):担心

2019独角兽企业重金招聘Python工程师标准>>> 近日微软公布了最新的WPF路线图&#xff0c;一片热议&#xff1b;对于老牌控件提供商葡萄城来说&#xff0c;这是WPF系列控件一个重要的机遇&#xff0c;因此&#xff0c;Spread Studio for WPF产品做了一次重要更新&…

C语言新手写扫雷攻略3

界面绘制好后&#xff0c;雷数也布置了&#xff0c;接下来就是游戏的运行过程了&#xff0c;今天先不说具体过程&#xff0c;再来看看需要用到的辅助函数 先是简单的画红旗&#xff0c;鼠标右键的功能是画红旗&#xff0c;至此我们都是在使用函数自己绘图&#xff0c;效率是低&…

制作欧比旺·克诺比逼真的CG角色学习教程

艺术站-制作欧比旺克诺比逼真的Cg角色 大小解压后&#xff1a;4.98G 含课程素材文件 1920X1080 .mp4 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; 课程获取&#xff1a;制作欧比旺克诺比逼真的CG角色学习教程 信息: 欧比旺是我一直以来…

Java学习总结:31(StringBuffer类)

StringBuffer类 在Java中String类不适合使用于频繁修改字符串的操作上(因为其字符串常量一旦声明则不可改变&#xff0c;只能改变字符串对象&#xff0c;改变的是其内存地址的指向)&#xff0c;所以我们可以使用StringBuffer类方便用户进行内容的修改。 例&#xff1a;观察Str…

c语言常用数据类型转换整理

你要发送原始数据流 还是 格式化输出&#xff1f; 如果是格式化 按原子说的 &#xff0c;用sprintf / printf; 如果发送原始内存数据流&#xff0c; 可按下面发送&#xff0c; 发送 #define BYTE0(pointer) (*((char*)(&pointer)0)); #define BYTE1(pointer) (*((char…

2022-2028年中国老年旅游市场深度调研及开发战略研究报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国老年旅游行业市场行业相关概述、中国老年旅游行业市场行业运行环境、分析了中国老年旅游行…

Andriod使用webview控件往APP里内嵌网页

1.布局文件片段&#xff1a;res-layout <WebView android:id"id/Toweb" android:layout_width"fill_parent" android:layout_height"fill_parent" /> 2.Java片段&#xff1a;src Overrideprotected void onCreate(Bundle savedInstance…

垃圾回收器ZGC应用分析总结

ZGC 是一款低延迟、高吞吐的垃圾回收器,由 Oracle 公司开发。它适用于大型、多核、内存容量较大的应用程序。ZGC 的设计目标是在最大限度地减少停顿时间的同时,为大型内存提供可伸缩性,并为生产部署提供高吞吐量和稳定性。它的目标是以不到 10 毫秒的暂停时间来控制 100MB 到 4TB 的内存。此外,ZGC 还致力于避免全局 JVM 暂停,从而提高系统的可用性。简单来说,它的设计目标是在不超过 10 毫秒的暂停时间内,尽可能地回收大量的堆内存。低延迟:ZGC 的主要目标是最小化 GC 暂停时间。

14个Java并发容器,你用过几个?

不考虑多线程并发的情况下,容器类一般使用ArrayList、HashMap等线程不安全的类,效率更高。在并发场景下,常会用到ConcurrentHashMap、ArrayBlockingQueue等线程安全的容器类,虽然牺牲了一些效率,但却得到了安全。上面提到的线程安全容器都在java.util.concurrent包下,这个包下并发容器不少,今天全部翻出来鼓捣一下。仅做简单介绍,后续再分别深入探索。ConcurrentHashMap:并发版HashMap。

MySQL主从复制(基于binlog日志方式)

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。主从复制的作用1.做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。2.架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。3.读写分离,使数据库能支撑更大的并发。a.从服务器可以执行查询工作(就是我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)

RabbitMQ安装

windows上安装过程&#xff1a;https://blog.csdn.net/linsongbin1/article/details/80170567运行中给新建用户赋权限&#xff0c;如果界面创完用户忘给权限了可以用这个方法&#xff1a;https://blog.csdn.net/hello_world_php/article/details/83859767 备注&#xff1a;我的…