《Java多线程编程核心技术》笔记-1
2017-12-25 10:15
330 查看
第一章 多线程技能
1、实现多线程的方式主要有两种,一种是继承Thread类,另一种是实现Runnable接口(Thread类实现了Runnable接口,它们之间具有多态关系)。
2、在使用多线程技术时,代码的运行结果与代码的执行顺序或调用顺序是无关的。执行start()方法的顺序不代表线程的启动顺序。
3、Thread类里有两个构造函数Thread(Runnable target)和Thread(Runnable target,String name)可以传递Runnable接口对象。同时也意味着Thread类不光可以传入Runnable接口对象,还可以传入一个Thread类对象,这样就可以将一个Thread类对象中的run()方法交由其他的线程调用。
4、在某些JVM中,i–的操作分成如下三步:
1)取得原有的i值
2)计算i-1
3)对i进行赋值
这三个步骤中,如果有多个线程同时访问,那么一定会出现非线程安全问题!
5、通过在run方法前加入synchronized关键字,使多个线程在执行run方法时,以排队的方式进行处理。当一个线程调用run前,先判断run方法有没有被上锁,如果上锁,说明有其他线程正在调用run方法,必须等其他线程对run方法调用结束后才能执行run方法。这样也就实现了排队调用run方法的目的。
6、synchronized可以在任意对象及方法上加锁,加锁的这段代码称为“互斥区”或“临界区”。
7、当一个线程想要执行同步方法里的代码时,线程首先尝试去拿这把锁,如果能够拿到这把锁,那么这个线程就可以执行synchronized里面的代码。如果不能拿到这把锁,那么这个线程就会不断尝试拿这把锁,直到能够拿到为止,而且是有多个线程同时去争抢这把锁。
8、非线程安全主要是指多个线程对同一个对象中的同一个实例变量进行操作时会出现值被更改、值不同步的情况,进而影响程序的执行流程。
9、currentThread()方法:可返回代码段正在被哪个线程调用的信息
用法:Thread.currentThread().getName()
10、isAlive()方法:判断当前的线程是否处于活动状态,返回值为boolean类型
11、sleep()方法:在指定的毫秒数内让当前“正在执行的线程”休眠
用法:Thread.sleep(2000);//当前线程休眠2秒
12、getId()方法:取得线程的唯一标识(id)
13、yield()方法:放弃当前的CPU资源,将它交给其他的任务去占用CPU执行时间。但放弃的时间不确定,有可能刚刚放弃,马上又获得CPU时间片。
14、停止一个线程可以使用Thread.stop()方法,调用时会抛出java.lang.ThreadDeath异常,但它是一个不安全的方法,而且已经被废弃了。
15、调用interrupt()方法仅仅是在当前线程中打了一个停止的标记,并不是真的停止线程。
16、两个判断线程是否处于中断状态的方法:
1)this.interrupted():测试当前线程是否是中断状态,执行后具有将状态标志清除为false的功能。
2)this.isInterrupted():测试线程Thread对象是否已经是中断状态,但不清除状态标志。
17、可以通过手动抛出中断异常InterruptedException()来中断线程,也可以通过Interrupt()和return结合停止线程。
18、线程在sleep状态下被停止,会抛出中断异常,进入catch语句,并且清除停止状态。
19、可以通过抛出异常或者return与interrupt()结合的方法来停止线程。但更建议使用抛异常法来实现线程的停止,因为在catch块中可以对异常的信息进行相关的处理,而且使用异常流能更好、更方便的控制程序运行流程,不至于代码中出现很多个return;造成污染。
20、可以使用suspend()方法暂停线程,resume()方法恢复线程的执行。但极容易导致对象被独占或者数据不同步。
21、setPriority()方法:设置线程的优先级(整数1-10)
22、线程的优先级具有继承性。
23、线程的优先级还具有随机性,也就是优先级较高的线程不一定每一次都先执行完。
24、Java中有两种线程,一种是用户线程,另一种是守护线程。守护线程是一种特殊的线程,当进程中不存在非守护线程了,则守护线程自动销毁。典型的守护线程就是垃圾回收线程,当进程中没有非守护线程了,则垃圾回收线程也没有存在的必要了,会自动销毁。
1、实现多线程的方式主要有两种,一种是继承Thread类,另一种是实现Runnable接口(Thread类实现了Runnable接口,它们之间具有多态关系)。
2、在使用多线程技术时,代码的运行结果与代码的执行顺序或调用顺序是无关的。执行start()方法的顺序不代表线程的启动顺序。
3、Thread类里有两个构造函数Thread(Runnable target)和Thread(Runnable target,String name)可以传递Runnable接口对象。同时也意味着Thread类不光可以传入Runnable接口对象,还可以传入一个Thread类对象,这样就可以将一个Thread类对象中的run()方法交由其他的线程调用。
4、在某些JVM中,i–的操作分成如下三步:
1)取得原有的i值
2)计算i-1
3)对i进行赋值
这三个步骤中,如果有多个线程同时访问,那么一定会出现非线程安全问题!
5、通过在run方法前加入synchronized关键字,使多个线程在执行run方法时,以排队的方式进行处理。当一个线程调用run前,先判断run方法有没有被上锁,如果上锁,说明有其他线程正在调用run方法,必须等其他线程对run方法调用结束后才能执行run方法。这样也就实现了排队调用run方法的目的。
6、synchronized可以在任意对象及方法上加锁,加锁的这段代码称为“互斥区”或“临界区”。
7、当一个线程想要执行同步方法里的代码时,线程首先尝试去拿这把锁,如果能够拿到这把锁,那么这个线程就可以执行synchronized里面的代码。如果不能拿到这把锁,那么这个线程就会不断尝试拿这把锁,直到能够拿到为止,而且是有多个线程同时去争抢这把锁。
8、非线程安全主要是指多个线程对同一个对象中的同一个实例变量进行操作时会出现值被更改、值不同步的情况,进而影响程序的执行流程。
9、currentThread()方法:可返回代码段正在被哪个线程调用的信息
用法:Thread.currentThread().getName()
10、isAlive()方法:判断当前的线程是否处于活动状态,返回值为boolean类型
11、sleep()方法:在指定的毫秒数内让当前“正在执行的线程”休眠
用法:Thread.sleep(2000);//当前线程休眠2秒
12、getId()方法:取得线程的唯一标识(id)
13、yield()方法:放弃当前的CPU资源,将它交给其他的任务去占用CPU执行时间。但放弃的时间不确定,有可能刚刚放弃,马上又获得CPU时间片。
14、停止一个线程可以使用Thread.stop()方法,调用时会抛出java.lang.ThreadDeath异常,但它是一个不安全的方法,而且已经被废弃了。
15、调用interrupt()方法仅仅是在当前线程中打了一个停止的标记,并不是真的停止线程。
16、两个判断线程是否处于中断状态的方法:
1)this.interrupted():测试当前线程是否是中断状态,执行后具有将状态标志清除为false的功能。
2)this.isInterrupted():测试线程Thread对象是否已经是中断状态,但不清除状态标志。
17、可以通过手动抛出中断异常InterruptedException()来中断线程,也可以通过Interrupt()和return结合停止线程。
18、线程在sleep状态下被停止,会抛出中断异常,进入catch语句,并且清除停止状态。
19、可以通过抛出异常或者return与interrupt()结合的方法来停止线程。但更建议使用抛异常法来实现线程的停止,因为在catch块中可以对异常的信息进行相关的处理,而且使用异常流能更好、更方便的控制程序运行流程,不至于代码中出现很多个return;造成污染。
20、可以使用suspend()方法暂停线程,resume()方法恢复线程的执行。但极容易导致对象被独占或者数据不同步。
21、setPriority()方法:设置线程的优先级(整数1-10)
22、线程的优先级具有继承性。
23、线程的优先级还具有随机性,也就是优先级较高的线程不一定每一次都先执行完。
24、Java中有两种线程,一种是用户线程,另一种是守护线程。守护线程是一种特殊的线程,当进程中不存在非守护线程了,则守护线程自动销毁。典型的守护线程就是垃圾回收线程,当进程中没有非守护线程了,则垃圾回收线程也没有存在的必要了,会自动销毁。
相关文章推荐
- Java多线程编程核心技术(第一章笔记)
- 《Java多线程编程核心技术》 笔记 未完待续
- 《Java多线程编程核心技术》学习笔记-第一章
- Java多线程编程核心技术第三章笔记
- 《java多线程编程核心技术》核心笔记(一)
- Java多线程编程核心技术笔记
- 《java多线程编程核心技术》核心笔记(三) Lock的使用
- java多线程编程核心技术笔记-死锁
- Java多线程编程核心技术
- Java多线程编程核心技术 第一章笔记
- Java多线程编程核心技术---线程间通信(一)
- 《Java多线程编程核心技术》(五)定时器Timer的使用
- 二、java多线程编程核心技术之(笔记)——如何停止线程?
- 《Java多线程编程核心技术》读后感(十)
- Java多线程编程核心技术---线程间通信(二)
- java多线程编程核心技术笔记-停止线程interrupt()方法
- java多线程编程核心技术5-Timer定时器
- 《Java多线程编程核心技术》读后感(十二)
- 《Java多线程编程核心技术》--第1章--Java多线程技能
- 【Java多线程编程核心技术】5.定时器Timer-笔记总结