Java多线程编程核心技术阅读笔记系列——第一章Java多线程技能

##实现多线程的方式:安全

        继承Thread类         实现Runnable接口多线程

执行start()方法的顺序不表明线程启动的顺序函数

**构造函数Thread(Runnable target)不光能够传入Runnable接口的对象,还能够传入一个Thread类的对象,这样作彻底能够将一个Threa对象中的run()方法交由其余线程进行调用 ** ##在某些JVM中,i--的操做要分红以下3步:工具

  • 取得原有i值
  • 计算i-1
  • 对i进行赋值 

##currentThread():返回代码段正在被那个线程调用的信息 测试

###currentThread()和 this的差别this

  • Thread.currentThread().getName()在两种实现线程的方式中均可以用
  • this.getName()只能在继承方式中使用。由于在Thread子类中用this,this表明的是线程对象。
  • 若是你在Runnable实现类中用this.getName(),那么编译错误,由于在Runnable中,不存在getName方法
  • 使用Thread.currentThread().getName()和使用this.getName(),均可以获得线程的名称,可是使用this调用getName()方法只能在本类中,而不能在其余类中,更不能在Runnable接口中,因此只能使用Thread.currentThread().getName()获取线程的名称,不然会出现编译时异常。

isAlive():判断当前线程是否处于活动状态(线程已经启动且还没有终止:正在运行或准备运行状态)线程

sleep():在指定的毫秒内让当前“正在执行的线程(this.currentThread())”休眠(暂停执行)code

##中止线程对象

**Thread.interrupt():不会终止一个正在运行的现场,还须要加入一个判断才能够完成线程的中止 仅仅实在当前线程打了一个中止的标志 **继承

Thread.stop():不安全,弃用的方法 ###中止线程的方法:

  • 退出标志:return+isInterrupter()+ interrupt()

  • stop()方法

  • interrupt()方法

  • 异常法:catch块中能够对异常的信息进行相关的处理并且使用异常流能更好、更方便的控制程序的运行流程,不至于代码中出现不少个return,形成污染

  • sleep+interrupt(): 若是在sleep状态下中止某一线程,会进入catch语句,而且清除中止状态值使之变成false;若是先interrupt()再sleep会抛出sleep interrupted异常

  • 暴力中止stop:stop()方法会抛出ThreadDeath异常(此异常不须要显示的捕捉) 若是强制让线程中止则有可能使一些请理性的工具得不到完成,另一种状况就对因此的对象进行了“解锁”,致使数据得不到同步的处理,出现数据不一致的问题。

this.interrupted()静态方法:测试当前线程(运行此方法线程,就是此段代码运行的线程,不是指调用对象的线程)是否已经中断,线程中断状态由该方法清除(置为false)

this.isInterrupter():测试线程Thread对象是否已经中断

##暂停线程 suspend():暂停线程

resume():回复线程

suspend与resume缺点
独占:若是使用不当,极易形成公共的同步对象的独占,是其余线程没法访问公共同步对象(println)
不一样步:

###yield 放弃当前的CPU资源,将它让给其余的任务去占用CPU执行时间

###优先级 优先级具备继承特性 设置线程优先级不能超过所属线程组的优先级 优先级具备规则性、随机性:高优先级的线程“老是大部分”先执行完

###守护线程 GC是典型的守护线程

相关文章
相关标签/搜索