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,一经查实,立即删除!

相关文章

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

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

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

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

javaWeb回忆思维导图

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

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

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

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

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

spring配置讲解

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

情商低的七种表现,你占了几个

你身边有没有这样的人:大家刚刚还聊的热火朝天,却在他进门的瞬间,整场“冷冻结冰”,大家都各忙各的,避免与他交流。我们称这样的人为“冷场帝”。那么,“冷场帝”是如何养成的?这样的人通常情商…

spring属性注入

注入方式 set方法注入 构造函数注入 p名称空间注入 spel注入(#表示理解为引用) 练习代码&#xff1a; <!-- 第二天 set注入 index:索引 ref:引用对象 type:参数类型--><bean name"person" class"com.spring.bean.Person"><constructor-a…

你所不知道的C和C++运行库

转自&#xff1a;http://blog.csdn.net/ithzhang/article/details/20160009 你所不知道的C和C运行库    周五晚&#xff0c;小雨&#xff0c;少见的未加班。无聊&#xff0c;遂准备写一篇博客&#xff0c;介绍一下C和C运行库&#xff0c;只因发现工作几年的人对此一知半解的…

使用注解配置spring如@Compnent、@Service、@Consroller、@scope和@value的使用

步骤 1.导包42spring-aop如图&#xff1a;为学习到该阶段需要用到的包(里面的aoptest是spring和junit整合测试的时候用到的)2.为主配置文件引入新的命名空间(约束)3.开启使用注解代理配置文件<?xml version"1.0" encoding"UTF-8"?> <beans xmln…

java实现深度优先搜索 (DFS) 算法

度优先搜索&#xff08;Depth First Search&#xff0c;DFS&#xff09;算法是一种用于遍历或搜索图或树的算法。这种算法从一个节点开始&#xff0c;沿着一条路径尽可能深地搜索&#xff0c;直到遇到不能继续前进的节点时返回上一个节点&#xff0c;然后继续搜索其他路径。具体…

spring整合JDBC

文章目录spring提供了很多模板整合Dao技术spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术.如何用Spring中的jdbc模板对数据库操作&#xff1a;spring配置进阶内容JDBCDaoSupport的使用spring提供了很多模板整合Dao技术 因为在jdbc、Hibernate、Mybatis中都有对数据…

spring中aop事务

文章目录事务为什要用到Spring中AOP事务事物的特性 ACID事务并发问题事务的隔离级别spring事务管理事务操作事务操作对象spring管理事务的属性介绍spring管理事务方式编码式xml配置(aop)注解配置Transactional注解在方法上添加Transactional注解在类上添加实际案例xml配置注入a…

Mybatis介绍、jdbc操作数据库原始写法以及Mybatis架构

文章目录Mybatis介绍jdbc操作数据库原生写法使用jdbc编程问题总结Mybatis架构Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code&#xff0c;并且改名为MyBatis 。2013年11月迁移到Github。 MyBatis是一个…

利用Mybatis写第一个数据库操作的程序

文章目录mybatis下载业务需求环境搭建加入配置文件创建pojosql映射文件加载映射文件实现根据id查询用户测试程序&#xff1a;效果mybatis下载 mybaits的代码由github.com管理 下载地址&#xff1a;https://github.com/mybatis/mybatis-3/releases 下载的mybatis文件如下&#…

利用Mybatis对数据库进行增删改查操作

文章目录mybatis模糊查找先来了解一下 #{}和${}的使用parameterType和resultType的使用selectOne和selectList的使用mysql自增主键返回方法一&#xff1a;mysql的函数函数返回方法二&#xff1a;定义useGeneratedKeys为true返回Mysql使用 uuid实现主键看到UUID和自增长的id想必…

聚合和组合的关系

转自&#xff1a;http://www.blogjava.net/lukangping/archive/2010/08/01/327693.html 记得在当时学习uml总是不好分清聚合与组合的关系&#xff0c;找工作时特地复习了这块的内容&#xff0c;结果正巧被面试官问道&#xff0c;这两天又在搞这块的内容&#xff0c;对聚合与组合…

关联和依赖的区别

最近研究设计模式&#xff0c;看类图有点发虚&#xff01;有些关系搞的不是很清楚。所以整理一下&#xff1a; 类与类之间由弱到强关系是: 没关系 > 依赖 > 关联 > 聚合 > 组合。 类和类之间八竿子打不着那就是没关系&#xff0c;这个没啥歧义。 依赖(dependenc…

Mybatis解决jdbc编程的问题以及mybatis与hibernate的不同

Mybatis解决jdbc编程的问题: 1、 数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能&#xff0c;如果使用数据库连接池可解决此问题。 解决&#xff1a;在SqlMapConfig.xml中配置数据连接池&#xff0c;使用连接池管理数据库链接。 2、 Sql语句写在代码中造成代码不…

Mybatis中Mapper动态代理方式

文章目录开发规范Mapper接口开发需要遵循以下规范Mapper.xml(映射文件)UserMapper(接口文件)加载UserMapper.xml文件总结selectOne和selectList:namespace:开发规范 Mapper接口开发方法只需要程序员编写Mapper接口&#xff08;相当于Dao接口&#xff09;&#xff0c;由Mybatis…