Java多线程编程核心技术-笔记1

第一章 多线程技能

  • 线程启动
  • 如何使线程暂停
  • 如何使线程停止
  • 线程的优先级
  • 线程安全相关的问题

    实现多线程编程的方式主要有两种,一种是继承Thread类,另一种是实现Runnable接口。

    从源代码可以发现Thread类实现了Runnale接口,它们之间具有多态关系。

    调用线程的start()方法是告诉系统需要安排一个时间来调用Thread中run方法,也就是使线程得到运行,具有异步执行的效果;如果是直接调用Thread.run()方法,就不是异步执行了,而是同步的,那么此时线程对象并不交给‘线程规划器’来进行处理。注意执行start()方法的顺序并不代表线程的启动顺序。

    通过给run方法钱加入synchronized关键字,使多个线程在执行run方法时,以排队的方式进行处理。Synchronized可以在任意对象和方法上加锁,而加锁的这段代码成为互斥区或临界区。

    线程的isAlive方法的作用是测试线程是否处于活动状态,当线程处于正在运行或准备开始运行的状态,就认为线程是存活的。

    大多数时候停止一个线程的操作时使用Thread.interrupt()方法,这个方法不会去终止一个正在运行的进程,还需要加入一个判断才可以完成线程的停止。判断线程的状态是否为停止的两个方法:this.interrupted()和this.isInterrupted()。Interrupted()方法测试当前线程是否已经是中断状态,执行后具有将状态标志位清除为false的功能;isInterrupted()方法则测试线程Thread对象是否已经是中断,但不清除状态标志。

    在Java多线程中可以使用suspend()方法暂停线程,使用resume()方法恢复线程的执行。若使用不当,极易造成公共的同步对象的独占,使其他线程无法访问公共同步对象。例如:System.out.println(),当程序运行到pringln()方法内部停止时,同步锁未被释放,导致pringln()方法一直处于暂停状态(println()方法是同步方法)。

    线程的优先级:在Java中线程的优先级分为1~10这10个等级,若不在此范围,JDK抛出throw new illegalArgumentException()异常。在Java中,线程的优先级是有继承性的,比如A线程启动了B线程,则B线程的优先级与A是一样的。

    守护线程:作用是为其他线程的运行提供便利服务,最典型的应用是GC(垃圾回收器)。

发布了12 篇原创文章 · 获赞 19 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/u012675150/article/details/82586777