2016/9/25编写java实验报告时对synchronized(同步代码块)的一些感悟

时间:2023-03-09 16:01:39
2016/9/25编写java实验报告时对synchronized(同步代码块)的一些感悟

通过此次实验,明白了多线程的设置和启动、synchronized代码块的用法、线程的优先级使用方法、知道了那几类资源是线程共享的。

我现在理解的多线程是:实例化一个继承了Thread类或实现了Runnable接口的类(继承是为了使其拥有参与多线程的资格);然后再将该类run()中的代码交由Thread类来执行,以此实现多线程的同步运行

经过翻阅网络博客,和代码尝试,进一步的认识了同步代码块:

①synchronized(){}代码块在执行时先判断括号里的对象有没有被上锁:

若无,则上锁并开始执行代码块中的代码

若有,则进入阻塞队列,等待唤醒

②synchronized修饰一个非static函数时,被锁住的对象为 this 即当前引用此函数的对象。

③synchronized修饰一个static函数时,由于static/静态 方法是属于类的,所以被锁住的是当前类,当该静态函数被访问时,所有欲访问该函数的线程都将进入阻塞队列

④synchronized据说可以修饰一个类,

class ClassName {
public void method() {
synchronized(ClassName.class) {
// todo
}
}
}

但经过实验好像并不能进行互斥访问,应该和泛型有关,应该在近期了解一下泛型部分

参考来自:http://blog.****.net/luoweifu/article/details/46613015