天天看点

多线程同步基础

主线程执行完要等待其他线程执行完,才退出虚拟机

主线程执行完需要让其他线程也结束,可设置为守护线程,守护线程必须在线程启动前开启

实现方式和继承方式的区别:

实现方式好处避免了但继承的局限性(不能继承其他类,只能继承thread类)

定义线程时,建议使用实现方式。

两种方式区别:

继承thread:线程代码存放thread子类的run方法中

实现runnable:线程代码存放接口子类的run方法中

同步的前提:

1,必须要有两个或者两个以上的线程。

2,必须是多个线程使用同一个锁(同一个对象)。

必须保证同步中只能有一个线程在运行。

如何判断程序是否有安全问题:

1,明确哪些代码是多线程运行代码。

2,明确共享数据。

3,明确多线程运行代码中哪些语句是操作共享数据的。

同步的两种表现形式:同步代码块和同步函数

同步代码块

同步函数(使用的锁是this)

同步函数被静态修饰后使用的锁不再是this,因为静态方法中不可以有this,

静态的同步方法使用的锁是该方法所在类的字节码文件对象。 类名.class

同步代码块和同步函数要使用同一把锁需要让同步代码块的锁设为this或者类名.class

多线程单例最好写成饿汉式(函数里面只有一句话)

懒汉式的延时加载多线程访问时会出现安全问题,同步锁是该类的字节码对象

同步弊端死锁-同步嵌套,锁不一样