java面试必备之多线程

     Java多线程

一、线程

    线程:可以并发执行多个任务。

二、线程创建方式

    线程有两种创建方式。

方式一:直接继承Thread并重写run方法。需要注意,启动线程要调用start方法,start方法调用完毕后,线程纳入到线程调度中,线程调度会分配CPU时间片来运行该线程,当线程运行时会自动调用run方法。

第一种创建线程方式有两个不足:

 1:由于要求继承Thread类,那么在将来项目中,就有可能出现继承冲突。

 2:由于继承了Thread后需要重写run方法来定义线程要执行的任务,这就导致线程与任务有一个强耦合关系,当前线程就只能做run方法中定义的任务,其他事情做不了,这不利于线程的重用。

第二种创建线程的方式

 定义一个类并实现Runnable接口来单独定义线程要执行的任务。

此外,还可以使用匿名内部类实现两种创建线程的方式。

三、相关API

Thread提供了一个静态方法static Thread currentThread(),该方法是用来获取运行这个方法的线程。 java中所有的代码都是由线程运行的,当需要获取某个线程时,只需使它执行上述方法即可。在哪个方法中定义代码,获取的就是运行该方法的线程。

Long getId();线程ID

String  getName();获取名字

int  getPriority();查看优先级

boolean isAlive();是否活着

    boolean isDaemon();是否为守护线程

    boolean isInterrupted();是否被中断了

四、操作线程

1)线程的优先级

线程不能干涉线程调度的工作,即:线程不能决定时间片分配给哪个线程,也不能决定分配的具体次数。但是可以通过改变线程的优先级来获取更高的CPU时间片几率。线程优先级分为10个等级,对应数字为1-10,其中1最低,5默认,10最高。理论上优先级越高的线程,获取CPU时间片的次数多。

(2)线程的休眠

Thread提供了静态方法 static void sleep(long ms),该方法会将执行该方法的线程进入阻塞状态执行的毫秒数,在该毫秒数内不会进入就绪状态,醒来后并不能保证进入运行状态,只能保证进入就绪状态。

(3)线程的加入

void join(),线程提供了一个方法join,该方法允许一个线程在另一个线程上等待,直到它的工作都结束,才继续当前线程的后续工作。否则一直处于阻塞状态。

(4)线程的中断

         可以使用Thread类中的interrupt()方法使线程离开run()方法。

(5)线程的同步

         线程安全问题来源于两个线程同时存取单一对象的数据。

         当一个方法被synchronized修饰后,该方法称为"同步方法",意思是说当前方法不能同时被两个以上的线程执行。多线程并发安全问题的本质就是多个线程发生了""

情况。有效缩小同步范围可以在保证并发安全的前提下提高并发效率。

   同步块需要指定同步监视器(上锁的对象),若希望该同步块有效果,必须保证多个线程看到的锁对象相同,通常使用this即可。

 互斥锁

 synchronized修饰的是两段代码,但是锁对象相同。那么这两段代码就是互斥的。

<!--EndFragment-->

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
JeeWx_2.4.2 版本发布,免费开源 微信 管家系统   1. JEEWX系统介绍        Jeewx是一款开源、免费的微信管家系统,采用 Java 语言实现,支持微信公众号、微信企业号,Jeewx实现了微信平台管理的基础功能,便于用户二次开发。        后续升级亮点: 即将推出“支付服务窗”插件,后续会扩展支持“微博”, “百度直达号”, “QQ公众号”等。 2. 版本升级亮点    推出扁平化UI界面,支持首页风格切换 (点击右上角-控制面板 -首页风格) 3. JEEWX系统功能

java面试必备之String类 - 2016-09-13 15:09:37

       String 类 一、 基础知识    在 Java 中将字符串作为对象来处理,有两种创建形式: String str= ” abc ” ;String str=new String( “ abc ” ). String 是不可变对象。 二、 常用 API int indexOf(int ch): 用来检查给定的一个字符在当前字符串中第一次出现的下标位置。 String substring(int begin,int end): 用来截取当前字符串的部分内容以获取这个子字符串。 String

Java之泛型(Generic Type) - 2016-09-13 15:09:37

Java之泛型(Generic Type) 一、背景知识     在面向对象编程中有四个概念:抽象、封装、继承、多态         这四种编程思想在Java中的体现:         1、抽象:接口(Interface)、抽象类     2、封装:用权限关键字控制自身属性对外的访问/继承权限:public、protected、default、private     3、继承:一个类可以继承另一个类的属性或方法。     4、多态:有继承必然有多态。允许子类重写 (overwrite) 父类中的方法。  

Java集合 - 2016-09-13 14:09:09

Map ConcurrentHashMap HashMap LinkedHashMap Hashtable WeakHashMap   Set HashSet LinkedHashSet TreeSet   List ArrayList LinkedList
Java 程序的三种结构 一、 顺序结构     从上往下逐行执行,每句必走。 二、 分支结构     有条件的执行某语句,并非每句必走。 1)if 结构 :1 条路 if(boolean 表达式 ){   语句块 } 若语句块仅有一条语句,可以省略“ {} ”。 2)if...else 结构 :2 条路     3)if...else if 结构 : 多条路 4)switch...case 结构 : 多条路 在 JDK1.6 及其以前版本中 switch 语句中的表达式的值必须是整型和字符型,在 JDK

阴影文字 - 2016-09-12 14:09:37

最近写了一段阴影文字的代码 /*   dkplus专业搜集和编写实用电脑软件教程,搜集各种软件资源和计算机周边(java网络编程、seo网站优化、web开发,lnmp,java网络编程,毕业论文设计),独立制作视频和ppt和音频微信公众号,点击进入 dkplus官方博客http://dkplus.iteye.com 微信搜索dkplus关注公众号可获取海量计算机周边资源。   */    import  java.awt.*;   import  java.applet.*;   import  java

第二篇 - 2016-09-12 14:09:36

现在使用最多的编程语言是什么?? 当然是JAVA

java面试必备之类和对象 - 2016-09-12 14:09:37

               Java 类和对象( 都是重点,必须理清楚 ) 一、 类和对象    1. 什么是类 ? 什么是对象 ?   1) 现实世界是由很多对象组成的,基于对象抽出了类   2) 对象 : 真实存在的单个的个体,类 : 类型 / 类别,一类个体   3) 类中可以包含 :     3.1) 所有对象所共有的特征 / 属性 ( 静 )---- 变量     3.2) 所有对象所共有的行为 ( 动 )--------- 方法   4) 一个类可以创建多个对象     同一个类的多个对象,

我的私房IT图书馆 - 2016-09-12 14:09:08

         工作十年,家中珍藏了不少经典的IT图书,现整理成册,分享给大家,希望大家有所借鉴,有所帮助。   Java类 书名 简介 疯狂Java讲义(第3版) 案例驱动,引爆编程激情。再现李刚老师课堂氛围。注释详细,轻松上手。  Java从入门到精通(第2版)  零基础、入门级的讲解。超多、实用、专业的范例和项目。随时检测自己的学习成果。细致入微、贴心提示。  Java典型模块与项目实战大全  覆盖Java语言6大技术要点,详解Java语法的最新特性,精选25个典型模块和4个项目案例,实战Java

Spring架构揭秘-声明式事务 - 2016-09-12 14:09:39

1、声明式事务原理 2、Spring事务模块结构及解析   一、声明式事务原理      在日常的开发中经常会使用到事务,比如在新增纪录的方法里,通常会先开启事务,然后再提交事务,遇到异常就回滚事务,事务代码都是模版型的,写起来很烦,但是又不能不写。这正好符合AOP的应用范围,Spring天然的支持AOP,于是伟大的声明式事务就这么诞生了。通过XML或注解的方式配置事务,标明在哪个类,那个方法需要使用事务即可。 二、Spring事务模块结构及解析      Spring对事务管理做了高级抽象,分为3个部分