一、线程安全
多线程的并发执行可以提高程序的效率,但是,当多个线程去访问同一个资源时,也会引发安全问题。例如:
当统计一个班级的学生数目时,如果有同学进进出出,则很难统计正确。为了解决这样的问题,需要实现多线程的同步,即限制某个资源在同一时刻只能被一个线程访问。
线程安全问题其实就是由多个线程同时处理共享资源导致的,要想解决线程安全问题,必须得保证在任何时刻只能有一个线程访问共享资源。
二、同步代码块
Java中提供了同步机制。当多个线程使用同一共享资源时,可以将处理共享资源的代码放在一个使用synchronized关键字修饰的代码块中,这个代码块被称作同步代码块。
某线程执行同步代码块时,其他线程将无法执行当前同步代码块。
创建同步代码块的语法格式如下:
lock是一个锁对象,可以是任意类型的对象,但多个线程共享的锁对象必须是唯一的
synchronized(lock (对象)){
操作共享资源代码块
}
使用示例:
class Ticket implements Runnable{
private int tickets = 10;
Obj