没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
全文可编辑 word 文档 页眉与背景水印可删除
1
实例解析 Java 中的 synchronized 关键字与
线程安全问题
首先来回顾一下 synchronized 的基本使用:
synchronized 代码块,被修饰的代码成为同步语句块,其
作 用 的 范 围 是 调 用 这 个 代 码 块 的 对 象 , 我 们 在 用
synchronized 关键字的时候,能缩小代码段的范围就尽量缩
小,能在代码段上加同步就不要再整个方法上加同步。这叫
减小锁的粒度,使代码更大程度的并发。
synchronized 方法,被修饰的方法成为同步方法,其作用
范围是整个方法,作用对象是调用这个方法的对象。
synchronized 静态方法,修饰一个 static 静态方法,其
作用范围是整个静态方法,作用对象是这个类的所有对象。
synchronized 类,其作用范围是 Synchronized 后面括号
括起来的部分 synchronized(className.class),作用的对
象是这个类的所有对象。
synchronized() () 中 是 锁 住 的 对 象 ,
synchronized(this)锁住的只是对象本身,同一个类的不同
对 象 调 用 的 synchronized 方 法 并 不 会 被 锁 住 , 而
synchronized(className.class)实现了全局锁的功能,所
全文可编辑 word 文档 页眉与背景水印可删除
2
有这个类的对象调用这个方法都受到锁的影响,此外()中还
可以添加一个具体的对象,实现给具体对象加锁。
synchronized (object) {
//在同步代码块中对对象进行操作
}
synchronized 关键字与线程安全
以为用了 synchronized 关键字包住了代码就可以线程同步
安全了。测试了下。发现是完全的错了。synchronized 必须
正确的使用才是真正的线程安全。。。虽然知道这种写法,一
直以为却由于懒而用了错误的方法。
看来基础还没有打好。仍需复习加强!工作中犯这种错误是
不可原谅的,要知道使用 synchronized 关键字的地方都是
数据敏感的!汗一把。。。
先贴代码:
package com;
public class ThreadTest {
public static void main(String[] args) {
MyThread m1 = new MyThread(1);
MyThread m2 = new MyThread(2);
全文可编辑 word 文档 页眉与背景水印可删除
3
m1.start();
m2.start();
}
}
final class MyThread extends Thread {
private int val;
public MyThread(int v) {
val = v;
}
//这种做法其实是非线程安全的
public synchronized void print1(int v) {
for (int i = 0; i < 100; i++) {
System.out.print(v);
}
}
public void print2(int v) {
//线程安全
synchronized (MyThread.class) {
for (int i = 0; i < 100; i++) {
剩余10页未读,继续阅读
资源评论
mmoo_python
- 粉丝: 0
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功