线程安全问题出现的根本原因: 1.必须存在两个或者两个以上的线程。 2.多个线程共享着一个资源,而且操作资源的代码有多句。 出现了线程安全问题的解决: 1. 同步代码块 格式: synchronized(锁对象){ 需要被同步的代码 } 同步代码块要注意的事项: 1. 锁对象可以是任意的一个对象。 2. 锁对象必须是多个线程共享的资源。 3. 调用了sleep方法的线程并不会释放锁对象。 4. 如果不存在着线程安全问题,千万不要使用同步代码块或者是同步函数, 因为会降低效率的。 2. 同步函数 : 使用synchronized修饰该函数则称作为同步函数。 同步函数要注意的事项: 1. 非静态同步函数的锁对象是this对象,静态函数的锁对象是当前所属类的class文件对象。 2. 同步函数的锁对象是固定的,无法更改。 推荐使用: 同步代码块 推荐的原因: 1. 同步代码块的锁对象可以由我们自己指定,同步函数的锁对象是固定 的。 2. 同步代码块可以随意指定那个范围需要被同步,而同步函数必须是整个函数都同步, 代码不灵活。
|