首页 昆明信息港 下载客户端 关于彩龙 论坛须知

《Java线程与并发编程实战》读书笔记之Thread和Runnable

        因为工作需要,最近学习了《Java线程与并发编程实战》一书。

        使用多线程的好处是可以实现业务流程中的一部分异步化,在不影响接口业务流程的前提下,提高接口的响应速度,增强系统的流畅度。比如评论帖子的操作,在评论数据入库之后可以返回评论结果,在返回之前可以启动一个线程异步处理评论的其他业务,比如通知贴子的作者,给评论者和帖子的作者加积分等。

        本文主要了解Java多线程编程中的Thread类和Runnable接口。

        Thread类为底层操作系统的线程体系架构提供一套统一接口。单个线程和一个Thread对象关联。

        Runnable接口为关联Thread对象的线程提供执行代码。这些代码在Runnable对象的void run方法中,这个方法虽然不接收任何参数并且没有返回值,但是有可能抛出异常。

        创建线程的方法:

        1.扩展Thread类并且重写Thread类的run方法。

        class MyThread extends Thread{

            @Override

            public void run(){

                System.out.println("Hello from thread");

            }

        }

        MyThread mt = new MyThread();

        2.将Runnable对象传入Thread类

        Runnable r = new Runnalbe(){

            @Override

            public void run(){

                System.out.println("Hello from thread");

            }

        }

        Thread t = new Thread(r);

 

        线程的状态:

        NEW:该状态下线程还没有开始执行

        RUNNABLE:该状态下线程正在JVM中执行

        BLOCKED:该状态下线程被阻塞并等待一个监听锁

        WAITING:该状态下线程无线等待另一个线程执行特定的操作

        TiME_WAITING:该状态下线程在特定的时间内等待另外一条线程执行某种操作

        TERMINATED:该状态下线程已经退出

 

        线程的常规操作:

        getName、setName(String name):获取或设置线程名

        isAlive():判断线程的存活状态,活的返回true,反之返回false

        getState:获取一条线程的执行状态

        getPriority(), setPriority(int priority):获取、设置线程的优先级

        isDaemon、setDaemon(boolean isDaemon):获取、设置线程的守护线程状态

        start:启动线程

 

        中断线程:

        Thread类提供了一种线程可以中断其他线程的机制。当一个线程被中断时,它会抛出java.lang.InterruptedException异常。当一个线程由于调用了Thread的sleep()或者join()方法而被阻塞时,该线程的中断状态就会被清除,同时抛出InterruptedException。

        interrupt():中断调用此方法的Thread对象所关联的线程

        static boolean interrupted():验证当前线程是否已经中断。该线程的中断状态会被该方法清理掉

        boolean isInterrupted():验证线程是否已经中断,该线程的中断状态不受此方法的影响

        

        等待线程:

        线程偶尔会启动另一个工作线程去执行一些操作。在工作线程结束自己的任务之后,这个启动工作线程的线程就准备着处理工作线程的结果。

        join():无限期地等待直至该线程死亡。当任一线程中断当前线程的时候,InterruptedException就会抛出。如果该异常被抛出,该线程的中断状态就会被清除。

        join(long millis):该线程死亡之前最多等待millis毫秒。如果传入0作为参数就会无限期地等待。如果millis是负数,就会导致IllegalArgumentException被抛出。当任一线程中断当前线程的时候,InterruptedException就会抛出。如果该异常被抛出,该线程的中断状态就会被清除。

        join(long millis, int nanos)该线程死亡之前最多等待millis毫秒加nanos纳秒。当millis是负数、nanos是负数或者nanos大于999999的时候,就会导致IllegalArgumentException被抛出。当任一线程中断当前线程的时候,InterruptedException就会抛出。如果该异常被抛出,该线程的中断状态就会被清除。

 

        线程睡眠:

        Thread提供了两个静态方法使线程睡眠。

        sleep(long millis):睡眠millis毫秒数。线程睡眠的实际的毫秒数取决于系统定时器和调度器的精度。如果millis是负数,就会导致IllegalArgumentException被抛出。当任一线程中断当前线程的时候,InterruptedException就会抛出。如果该异常被抛出,该线程的中断状态就会被清除。

        sleep(long millis, int nanos):睡眠millis毫秒数加nanos纳秒数。实际睡眠的毫秒数和纳秒数取决于系统定时器和调度器的精度。当millis是负数、nanos是负数或者nanos大于999999的时候,就会导致IllegalArgumentException被抛出。当任一线程中断当前线程的时候,InterruptedException就会抛出。如果该异常被抛出,该线程的中断状态就会被清除。

0点赞了文章

网友评论

0条评论

发表

网友评论

0条评论

发表

最新评论

推荐文章

彩龙

Copyright © 2008-2021 彩龙社区 版权所有 All Rights Reserved.

免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。

经营许可证编号:滇B2-20090009-7

下载我家昆明APP 下载彩龙社区APP