多线程详解

1、线程与进程区别

每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。

总结:进程就是正在运行的程序,是所有线程的集合,每一个线程是进程中的一条执行路径。

2、多线程

多线程就是为了提高程序的执行效率。

3、守护线程

使用setDaemon(true)方法设置为守护线程

守护线程与主线程有关,主线程销毁守护线程也同时销毁。

用户线程指用户自定义创建的线程,也称为非守护线程。非守护线程与主线程无关联,主线程停止非守护线程也不会停止。

4、多线程几种状态

新建  就绪  运行  阻塞  停止

5、join

在线程B中调用线程A的join()方法,意思是:B线程等待A线程执行完毕后,B线程在执行。

6、线程安全

当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。

线程安全解决办法::使用多线程之间同步synchronized或使用锁(lock)。

同步代码块:将可能会发生线程安全问题的代码,用synchronized给包括起来。

synchronized(锁对象){

 可能会发生线程冲突问题

}

同步函数:在方法上修饰synchronized 称为同步函数。(锁对象是当前this对象)

静态同步函数:方法上加上static关键字,使用synchronized 关键字修饰(锁对象当前类字节码对象)

7、多线程三大特性

原子性:一个操作或者多个操作 要么全部执行成功,要么就都不执行。

可见性:当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。

有序性:程序执行的顺序按照代码的先后顺序执行。

8、Java内存模型

共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入时,能对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化。

9、什么是Volatile(具备可见性不具备原子性)

Volatile 关键字的作用是变量在多个线程之间可见。

:线程之间是不可见的,读取的是副本,没有及时读取到主内存结果,使用Volatile关键字将解决线程之间可见性, 强制线程每次读取该值的时候都去“主内存”中取值

10、wait()、notify、notifyAll()方法

wait()、notify()、notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态。

锁对象.wait() 使持有该对象的线程把该对象的控制权交出去,然后处于等待状态。

锁对象.notify() 通知某个正在等待这个对象的控制权的线程可以继续运行。

锁对象.notifyAll()方法就会通知所有等待这个对象控制权的线程继续运行。

11、wait与sleep区别?

sleep()方式属于Thread类的,wait()方法属于object类的。

sleep()方法设置休眠时间,时间到了会自动恢复运行,不会释放锁资源。

wait()方法线程会释放锁资源,此线程进入等待状态。

12、JDK1.5-Lock

在 jdk1.5 之后,并发包中新增了 Lock 接口(以及相关实现类)用来实现锁功能,Lock 接口提供了与 synchronized 关键字类似的同步功能,但需要在使用时手动获取锁和释放锁。

---------------------Lock写法

Lock lock  = new ReentrantLock();

lock.lock();

try{

//可能会出现线程安全的操作

}finally{

//一定在finally中释放锁

//也不能把获取锁在try中进行,因为有可能在获取锁的时候抛出异常

  lock.ublock();

}

 

 

13、Lock 接口与 synchronized 关键字的区别

https://blog.csdn.net/hanchao5272/article/details/79679919

14、什么是ThreadLoca

ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值