线程(Thread)
来源:互联网 发布:mac ruby woo 编辑:程序博客网 时间:2024/05/30 04:12
线程是Java乃至所有应用开发的必修基础课,引入多线程可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。
以下,我将从进程和线程的比较、自定义线程、线程生命周期和线程安全等方面对线程进行介绍:
一、进程 VS 线程
1、进程:计算机正在执行的程序,内存分配的最小单位;一个进程可以包括多条线程。
多进程:智能手机多个程序并行或并发执行。
单进程:老式非智能手机一次智能运行一个程序。
2、线程:计算机程序执行的最小单位。
多线程:一个应用程序有多条执行路径,路径之间独立。
单线程:一条执行路径。
3、补充:一个Java应用程序在执行过程中通常有两个线程在执行,分别为 main() 函数主线程
和GC(垃圾回收)线程。
二、自定义线程的两种方式:
1、继承 Thread 类,并重新 run() 方法;
2、实现 Runnable 接口;
再通过 new Thread(new MyRunnable()).start() 调用;
三、线程生命周期(状态转换):
补充:
1、Thread.start() 方法只能执行一次,否则抛出 IllegalThreadStateException。
2、线程执行 sleep() 方法,线程进入阻塞状态,但不释放资源;线程执行 wait() 方法进入阻塞状态并
释放资源。
3、线程执行 Thread2.join() 方法时,当前线程进入阻塞状态,并让出CPU使用权给Thread2,只有
Thread2 执行完毕,当前线程方可进入就绪状态,等待CPU调用。
4、可通过调用 Thread.currentThread.getName() 方法获取当前线程名字;其中线程名字由 JVM
(Java虚拟机)赋值,也可通过调用Thread.setName(String) 方法自定义。
四、线程优先级(Priority):
1、默认优先级为 5;
2、线程在执行过程中不能更改优先级,必须在线程进入就绪状态前即 start() 执行前进行设置;
3、优先级范围 [1 - 10],数字越大,优先级越高;
4、自定义优先级:Thread.setPriority(int)。
五、线程安全(仅限于多线程):
1、锁对象概念:
在 Java 中每一个对象都有一个内置的对象锁,而且这个锁只有一把钥匙。这就决定了
当一个线程获取了该对象锁的时候别的线程无法再获取,只有当该获取对象锁的线程释放对象
锁后其他线程才可获取。
2、常用的两种锁对象方式:
1> 同步代码块:(锁对象)
2> 同步方法:(普通方法:锁对象,静态方法:锁字节码 .class)
普通方法:
静态方法:
3、死锁:
多线程中,当一个线程拥有另一个线程资源所需,而另一个线程也拥有该线程资源所需,并且
彼此都必须在获得对方资源(即对象锁)时才能持续执行;当两方都不退让的时候,就会陷入一种
僵持状态——死锁。
六、线程之间通信:
1、wait():等待,将当期线程从运行状态转到阻塞状态,并释放对象锁;
2、notify():唤醒一个对应对象锁的线程;
3、notifyAll():唤醒所有对应对象锁的线程;
补充:以上三个方法属于Object类,不是线程特有方法,要在同步代码里面使用才有意义。
- 线程(thread)
- 线程(thread)技术
- 线程(thread)介绍
- 线程(thread)
- Thread 线程(三)
- Thread (线程)(杂记)
- 线程(thread)
- Thread 线程(1)
- 线程(Thread)
- Servlet使用线程(thread)
- Delphi Thread 线程(1)
- Thread (四)线程让步
- Thread.setDaemon() --守护线程
- Java Thread (线程)总结
- Java Thread 总结(线程)
- 线程(二)Thread类
- 线程管理(Thread Management)
- C#中的线程(Thread)
- Java利用zxing生成/解析二维码
- TCP客户端 长连接策略
- class.c 添加中文注释(3)
- Java后台如何接收并处理前台传过来的json格式的数组参数
- js实现撤销恢复功能
- 线程(Thread)
- ubuntu 16.04 中配置Eclipse c++开发环境
- hadoop2.x常用端口及定义方法
- LeetCode 53. Maximum Subarray
- 高效的找出两个List中的不同元素
- 单例模式
- 「codeforces 」教育场20-D.Magazine Ad
- 监控平台zabbxi安装以及使用指南
- HDU