线程基础知识01

                                                    **线程**

一、线程与进程
1、进程:理解成某一个正在运行的程序(有一些程序是有多个进程同时运行的)
*1)进程是程序运行的基本单位(一个程序至少拥有一个进程)
*2)进程拥有独立的系统资源(内存,cpu,磁盘……)
2、线程:进程是由线程组成的,一个进程可以拥有多条线程,但是必须有一个主线程(main方法)
*1)线程不能离开进程而独立存活
*2)系统不会为线程分配资源
*3)多线程共享进程的资源
3、多线程具有的特点: 1)抢占式;2)效率高;3)开销少; 4)容易调度(CPU调度);5)高并发性
4、并行:多个线程同时执行
5、并发:多个线程根据Cpu的调度情况而执行

二、线程的生命周期
1、新建:new
2、就绪:start()
3、运行:run():如果处于就绪状态的线程获得了cpu,开始执行run方法的线程执行体,则该线程就处于运行状态。
4、结束:run()方法执行结束
阻塞:线程中的某些方法 可能导致阻塞 get() 、 sleep()
*如果线程出现了阻塞,并不会直接回到 运行状态 而是 进入就绪状态。等待CPU的调度

三、线程的创建方式
1、继承Thread类,重写run方法
**注意:Thread类中常用的方法:
1、Thread.currentThread().getName():获取线程的名字
2、start():开启线程的方法
3、sleep():休眠,睡眠:让正在执行的线程休息一会
4、currentThread():获取当前正在运行的线程
2、实现Runnable接口
**注意:1)Runnable接口,只是提供了run(); java中的线程类,只有Thread类
2)如果实现Runnable接口,想开启线程,可以通过Thread的构造方法,进行构建
△△ Runnable和Thread的区别
* 1、可以避免java中单继承的局限性
* 2、通过Runnable接口实现线程,可以资源共享
3、实现Callable接口(了解)
**注意:1)和Runnable接口不一样,Callable提供了一个call(),并且call()有返回值,call() throws Exception
2)Java5,提供了一个接口Future 作为Callbale接口中call()的返回值,并且给Future 提供了一个实现类:FutureTask
* public class FutureTask implements RunnableFuture
*public interface RunnableFuture extends Runnable, Future

四、线程安全
1、synchronized(同步锁)
* synchronized(对象){
* 同步的代码
* }
* 方法:
* private synchronized void sale() { }
*
2、lock锁:
* lock(): 加同步锁
* unlock():释放同步锁
Lock lock = new ReentrantLock();
@Override
public void run() {
lock.lock();
同步的代码
lock.unlock();
}

猜你喜欢

转载自blog.csdn.net/qq_36095679/article/details/86026010