Java核心技术——多线程
来源:互联网 发布:怎样加入淘宝外卖 编辑:程序博客网 时间:2024/06/05 16:17
一、在一个单独的线程中执行一个任务的简单过程
(1)将任务代码移到实现了Runnable接口的类的run方法中。该接口如下所示:
public interface Runnable() {public void run() {}}
(2)创建一个类对象:
(3)由Runnable创建一个Thread对象Runnable r=new MyRunnable();
Thread t=new Thread(r);
(4)启动线程
t.start();
注意:不要调用Thread类或Runable对象的run方法。直接调用run方法,只会执行同一个线程中的任务,而不会启动新线程;而t.start()方法将创建一个执行run方法的新线程。
(5)例子:
public class TestThread {public static void main(String[] args){Runnable runnable=new FirstRunnable();Runnable runnable2=new SecondRunnable();Thread thread=new Thread(runnable);Thread thread2=new Thread(runnable2);thread.start();thread2.start();}}class FirstRunnable implements Runnable{@Overridepublic void run() {for(int i=1;i<100;i++){System.out.println("123");}}}class SecondRunnable implements Runnable{@Overridepublic void run() {for(int j=1;j<100;j++){System.out.println("abc");}}}
二、中断线程
三、线程状态没有可以强制线程终止的方法,然而,interrupt方法可以用来请求终止线程。
当对一个线程调用interrupt方法时,线程的中断状态将被置位,如果线程被阻塞(调用sleep或wait)就无法检测中断状态。在一个被阻塞的线程上调用interrupt方法时,阻塞调用将会被InterruptedException异常中断。
四、线程属性线程可以有6种状态:New,Runnable,Blocked,Waiting,Timed waiting,Terminated。
4.1 线程优先级
默认情况下,一个线程继承它的父线程的优先级,可用setPriority方法提高或降低任何一个线程的优先级。MIN_PRIORITY=1, MAX_PRIORITY=10。、
线程优先级高度依赖于系统,映射到宿主平台上,Windows有7个优先级,Linux中优先级被忽略。
4.2 守护线程
五、线程同步t.setDaemon(true);将线程设为守护线程。
守护线程的唯一用途是:为其他线程提供服务。
5.1 锁对象和条件对象
(1)锁用来保护代码片段,任何时刻只能有一个线程执行被保护的代码。
(2)锁可以管理试图进入被保护代码段的线程。
(3)锁可以拥有一个或多个相关的条件对象。
(4)每个条件对象管理那些已经进入被保护的代码段但还不能运行的线程。
5.2 synchronized关键字
Java中的每一个对象都有一个内部锁,如果一个方法用synchronized关键字申明,那么对象的锁将保护整个方法,即,要调用该方法,线程必须获得内部的对象锁。
内部对象只有一个相关条件。wait方法添加一个线程到等待集中,notifyAll/notify方法解除等待线程的阻塞状态。这三个方法是Object类的方法。
5.3阻塞队列
建议使用阻塞队列来同步完成一个共同任务的线程,synchronized关键字次之,有特别需要才使用锁对象和条件对象。
- 【Java核心技术——多线程】
- Java核心技术——多线程
- Java核心技术——多线程
- 读书笔记——Java多线程编程核心技术
- Java核心技术再理解——深入浅出Java多线程
- Java多线程编程核心技术——生产者消费者模型
- Java 多线程核心技术梳理
- java多线程编程核心技术
- 《Java多线程编程核心技术》
- Java 多线程编程核心技术
- [Java多线程编程核心技术]
- 《java多线程编程核心技术》
- java多线程编程核心技术
- Java多线程编程核心技术
- java多线程编程核心技术
- Java多线程编程核心技术
- 《Java多线程编程核心技术》学习笔记(一)——Java的多线程
- Java多线程之this与Thread.currentThread()的区别——java多线程编程核心技术
- 利用de Casteljau算法绘制Bezier曲线
- Visual Studio 2015 解决方案资源管理器
- 想念你的时候
- Scala 赋值语句
- hibernate向Mysql中插入中文乱码的问题
- Java核心技术——多线程
- yum源 epel源 no package available 更换国内yum源
- 515nod 1548 欧姆诺姆和糖果 【枚举】
- CSS(2.1)_Know-it-all
- Android 解析服务器json数据
- hdu 2502 月之数(数学)
- 如何解决学vue 1.0和vue 2.0冲突问题
- UGUI 垂直方向CenterOnChild功能的简单实现
- 11. Container With Most Water Medium