Java多线程基础
一、线程和进程
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
线程可以理解成进程中独立运行的子任务。
一个正在运行的进程,至少会有一个线程在运行。进程结束,线程也一定结束了。
Java程序每次运行,至少启动了两个线程,一个是main线程,一个是垃圾回收的线程。
二、多线程的优点
可以在同一时间运行更多不同种类的任务,大大提高系统的运行效率。
多线程是实现并发机制的一种有效手段。
*多线程是异步的,各个线程是随机被调用的。哪个线程先抢占到了CPU资源,哪个线程就会先执行。
三、Java中多线程的实现
Java中实现多线程有以下三种方式:
1、继承Thread类
一个类继承了Thread类,就具备了多线程的操作功能。
必须明确覆写Thread类的run()方法。
2、实现Runnable接口
继承Thread类,不适合资源共享。而实现Runnable接口,则很容易实现资源的共享。
3、实现Callable接口
Callable接口类似于Runnable接口,两者都是为那些其实例可能被另一个线程执行的类设计的,Callable比较少用。
Callable和Runnable的区别是Callable有返回值,Runnable 不会返回结果,并且无法抛出经过检查的异常。
实现Runnable接口与继承Thread类相比,具有如下的优势:
1)适合多个线程去处理同一个资源
2)可以避免Java中单继承的限制
四、多线程中的同步问题
Java多线程中的同步,实际上就是写出线程安全的程序。
非线程安全会在多个线程对同一个资源进行并发访问时发生,产生脏读的后果。而线程安全就是获得的实例变量的值是通过同步处理过的,不会出现脏读。
1、synchronized关键字
synchronized关键字可以保证同一时刻只有一个线程能执行某个方法或者某个代码块。
Java中的每个对象都可以作为锁,这是synchronized实现同步的基础:
普通同步方法,锁是当前实例对象
静态同步方法,锁是当前类的class对象
同步代码块,锁是大括号里面的对象
当一个线程访问同步代码块时,它首先是需要得到锁才能执行同步代码,当退出或者抛出异常时必须要释放锁。
2、volatile关键字
volatile关键字的作用是是变量在多个线程间可见,是线程同步的轻量级实现。

浙公网安备 33010602011771号