java多线程笔记补充之 线程控制操作

线程休眠:让执行的线程暂停一段时间,进入计时等待状态。

方法:staticvoid sleep(long millis)

调用sleep后,当前线程放弃CPU,在指定时间段之内,sleep所在线程不会获得执行的机会。

此状态下的线程不会释放同步锁/同步监听器.

该方法更多的用于模拟网络延迟,让多线程并发访问同一个资源的错误效果更明显.

在开发中也会故意使用该方法,如:


实现:


联合线程:

线程的join方法表示一个线程等待另一个线程完成后才执行。join方法被调用之后,线程对象处于阻塞状态。

有人也把这种方式称为联合线程,就是说把当前线程和当前线程所在的线程联合成一个线程



后台线程:在后台运行的线程,其目的是为其他线程提供服务,也称为“守护线程"。JVM的垃圾回收线程就是典型的后台线程

特点:若所有的前台线程都死亡,后台线程自动死亡,前台线程没有结束,后台线程是不会结束的

测试线程对象是否为后台线程:使用thread.isDaemon()。

前台线程创建的线程默认是前台线程,可以通过setDaenon(true)方法设置为后台线程,并且当且仅当后台线程创建的新线程时,新线程是后台线程。

设置后台线程:thread.setDaemon(true),该方法必须在start方法调用前,否则出现IllegalThreadStateException异常



线程优先级:

每个线程都有优先级,优先级的高低只和线程获得执行机会的次数多少有关,并非线程优先级越高的就一定先执行,哪个线程的先运行取决于CPU的调度

MAX_PRIORITY=10,最高优先级

MIN_PRIORITY=1,最低优先级

NORM_PRIORITY=5,默认优先级

-----------------------

 int getPriority() :返回线程的优先级。

 void setPriority(int newPriority) : 更改线程的优先级。

-----------------------

每个线程都有默认优先级,主线程默认优先级为5,如果A线程创建了B线程,那么B线程和A线程具有相同优先级.

注意:不同的操作系统支持的线程优先级不同的,建议使用上述三个优先级,不要自定义

线程礼让:

yield方法:表示当前线程对象提示调度器自己愿意让出CPU资源,但是调度器可以自由的忽略该提示

调用该方法之后,线程对象进入就绪状态,所以完全有可能:某个线程调用了yield()之后,线程调度器又把它调度出来重新执行

从Java7提供的文档上可以清楚的看出,开发中很少会使用到该方法,该方法主要用于调试或测试,它可能有助于因多线程竞争条件下的错误重现现象

-----------------------------------------

sleep方法和yield方法的区别:

  1):都能使当前处于运行状态的线程放弃CPU,把运行的机会给其他线程.

  2):sleep方法会给其他线程运行机会,但是不考虑其他线程的优先级,yield方法只会给相同优先级或者更高优先级的线程运行的机会.

  3):调用sleep方法后,线程进入计时等待状态,调用yield方法后,线程进入就绪状态.


定时器和线程组

在JDK的java.util包中提供了Timer类,可以定时执行特定的任务.

TimerTask类表示定时器执行的某一项任务.

常用方法:

schedule(TimerTasktask,long delay,long period):

schedule(TimerTasktask,long delay):

-----------------------------------------------------------------

ThreadGroup类表示线程组,可以对一组线程进行集中管理.

用户在创建线程对象时,可以通过构造器指定其所属的线程组.

Thread(ThreadGroupgroup,String name);

如果A线程创建了B线程,如果没有设置B线程的分组,那么B线程加入到A线程的线程组.

一旦线程加入某个线程组,该线程就一直存在于该线程组中直到线程死亡,不能在中途修改线程的分组.

------------------------

当Java程序运行时,JVM会创建名为main的线程组,在默认情况下,所有的线程都该改线程组下.


线程相关的知识点:

     1):线程安全的集合对象(留到集合框架中去).

     2):ThreadLocal:本地线程变量,ThreadLocal模式

     3):线程池,Java8堆线程池新增的功能.

     4):Java5新增的线程并发操作.


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

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

相关文章

图结构练习——BFS——从起始点到目标点的最短步数

题目描述 在古老的魔兽传说中,有两个军团,一个叫天灾,一个叫近卫。在他们所在的地域,有n个隘口,编号为1..n,某些隘口之间是有通道连接的。其中近卫军团在1号隘口,天灾军团在n号隘口。某一天&…

C++中的Dll内存问题

这两天在做一个数据结构,使用树结构,两层,第一层的数据元素为第二层的n个分支 遇到问题如下: 1:使用vector在debug下运行正常,在release下源码运行正常封装后运行失败 请教了多人,觉得可能是vec…

Catch That Cow

题目描述 Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John ha…

java5新特性静态引用、foreach、自动装箱和泛型枚举以及可变参数的总结

静态引用 导入(import)表示去找哪一个类,去哪一个包下去找哪些被使用到的类。 在java中有一个语言核心包:java.lang. 使用java.lang包中的API,不需要引用,直接能找到,但是,如果我们使用到的API不呼吁java.l…

C++中堆和栈的完全解析

C中堆和栈的完全解析 内存分配方面: 堆: 操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删 除&#xff…

数据结构实验之图论四:迷宫探索

题目描述 有一个地下迷宫,它的通道都是直的,而通道所有交叉点(包括通道的端点)上都有一盏灯和一个开关;请问如何从某个起点开始在迷宫中点亮所有的灯并回到起点?输入 连续T组数据输入,每组数据第一行给出三个正整数&am…

心灵的旅行

http://wzrong.blog.163.com/blog/static/1326445772012214295364/ --心灵的旅行(陈科儒) http://www.qixingquan.com/article-143060-1.html --神山的召唤 http://www.qixingquan.com/thread-78730-1-1.html --一个人的远方,独行滇西北

java8新特性lambda表达式、函数式编程、方法引用和接口默认方法以及内部类访问外部变量

一提到java是一种什么语言? 大多数人肯定异口同声的说是一门面向对象的语言,这种观点从我们开始学java就已经根深蒂固了,但是学到java8新特性函数式编程的时候,我才知道java并不是纯面向对象的语言。 lambda表达式的详细教程 lam…

C++ 中export 关键字的尴尬处境

分离编译模式(Separate Compilation Model)允许在一处翻译单元(Translation Unit)中定义(define)函数、类型、类对象等,在另一处翻译单元引用它们。编译器(Compiler)处理…

图结构练习——最短路径

题目描述 给定一个带权无向图&#xff0c;求节点1到节点n的最短路径。 输入 输入包含多组数据&#xff0c;格式如下。 第一行包括两个整数n m&#xff0c;代表节点个数和边的个数。(n<100)剩下m行每行3个正整数a b c&#xff0c;代表节点a和节点b之间有一条边&#xff0c;权…

C++强大背后

在31年前(1979年)&#xff0c;一名刚获得博士学位的研究员&#xff0c;为了开发一个软件项目发明了一门新编程语言&#xff0c;该研究员名为Bjarne Stroustrup&#xff0c;该门语言则命名为——C with classes&#xff0c;四年后改称为C。C是一门通用编程语言&#xff0c;支持多…

javaWeb回忆思维导图

出处&#xff1a;https://blog.csdn.net/jackfrued/article/details/42617675 https://www.cnblogs.com/xieyupeng/p/6961667.html

如何理解const char*, char const*, char*const等

const char*, char const*, char*const的区别问题几乎是C面试中每次都会有的题目。 事实上这个概念谁都有,只是三种声明方式非常相似很容易记混。 Bjarne在他的The C Programming Language里面给出过一个助记的方法&#xff1a; 把一个声明从右向左读。 char * const cp; …

查找练习 hash——出现过的数字

题目描述 有一个数据字典&#xff0c;里面存有n个数字(n<100000)&#xff0c;小明现在接到一个任务&#xff0c;这项任务看起来非常简单——给定m个数字&#xff0c;分别查询这m个数字是否出现在字典之中&#xff1b;但是考虑到数据量的问题&#xff0c;小明找到了善于编程的…

读过的最好的 C++ 开源代码

https://www.zhihu.com/question/21376384

数据结构实验之查找五:平方之哈希表

题目描述 给定的一组无重复数据的正整数&#xff0c;根据给定的哈希函数建立其对应hash表&#xff0c;哈希函数是H(Key)Key%P&#xff0c;P是哈希表表长&#xff0c;P是素数&#xff0c;处理冲突的方法采用平方探测方法&#xff0c;增量dii^2,i1,2,3,...,m-1 输入 输入一组测试…

Spring详细导包截图以及IOC和DI思想

思想 IOC DI Spring中的工厂(容器) ApplicationContext&#xff1a; BeanFactory(过时)&#xff1a; BeanFactory和ApplicationContext区别 BeanFactory&#xff1a; 1.Spring原始接口&#xff0c;针对原始接口实现类功能较为单一 2.是在getBean的时候才会生成类的实例…

毕业两年的我--奋斗中的程序员

又到一年毕业季&#xff0c;不知不觉&#xff0c;自己毕业快两年了&#xff0c;在这两年中&#xff0c;从一位小白程序员蜕化到现在的拥有两年经验的C程序员&#xff0c;这两年里面&#xff0c;不敢说成长有多快&#xff0c;进步有多大&#xff0c;但是感觉很踏实&#xff0c;每…

数据结构实验之查找七:线性之哈希表

题目描述 根据给定的一系列整数关键字和素数p,用除留余数法定义hash函数H(Key)Key%p,将关键字映射到长度为p的哈希表中&#xff0c;用线性探测法解决冲突。重复关键字放在hash表中的同一位置。 输入 连续输入多组数据&#xff0c;每组输入数据第一行为两个正整数N(N < 1000)…

spring配置讲解

Bean元素 Bean元素进阶 scope属性&#xff1a; 1.singleton(默认值):单例对象.被标识为单例的对象在spring容器中只会存在一个实例 2.prototype:多例原型.被标识为多例的对象,每次再获得才会创建.每次创建都是新的对象.整合struts2时,ActionBean必须配置为多例的. 3.request…