多线程之synchronized
来源:互联网 发布:区块链 p2p网络层 编辑:程序博客网 时间:2024/05/08 19:09
顾名思义:同步锁
(1)同步代码:但是锁住的不是代码,而是传入的对象,看个例子:
这个例子的主要意思:
肯定先运行t1.start(),再运行t2.start()
但是这两个用同一个service,所有,但在t1.fun1()锁住3秒时,t2.fun2()也会被同步锁住,
最后还是先输出fun1,再输出fun2,
如若:去掉fun2()的同步锁代码,则先输出fun2,3秒后再输出fun2,
class Service {
//定义方法fun1
public void fun1(){
//同步
synchronized(this){
try{
//休眠3秒,记得放在try--catch
Thread.sleep(3000);
}
catch(Exception e){
e.printStackTrace();
}
System.out.println("fun1");
}
}
//定义方法fun2
public void fun2(){
//同步
synchronized(this){
System.out.println("fun2");
}
}
}
class MyThread implements Runnable{
//定义私人服务类对象
private Service service;
public MyThread(Service service){
this.service = service;
}
//重写run()
public void run(){
service.fun1();
}
}
//定义类MyThread2实现Runnable接口
class MyThread2 implements Runnable{
//定义私人服务类
private Service service;
//构造方法
public MyThread2(Service service){
this.service = service;
}
//重写Runnable接口的run方法
public void run(){
service.fun2();
}
}
//测试类
class Test{
public static void main(String args []){
//生成Service对象
Service service = new Service();
//分别生成参数不同的Thread对象
Thread t1 = new Thread(new MyThread(service));
Thread t2 = new Thread(new MyThread2(service));
//启动线程
t1.start();
//System.out.println("aaa");
t2.start();
}
}
输出:
F:\work\src\synchronized>java Test
fun1
fun2
F:\work\src\synchronized>java Test
fun1
fun2
但是有时会输出:
F:\work\src\synchronized>java Test
fun2
fun1
F:\work\src\synchronized>java Test
fun2
fun1
个人认为:
这是cpu抢占的问题t1.start()和t2.start()方法距离太近,可能是调用fun1和fun2的过程中,t2比t1快了,但是同步锁是没错的,
如果在t1.start()和t2.start()的中间加一行树System.out.println("aaaa");
则不会发生fun2比fun1快的情况
2,锁住方法,在public 后面加synchronized,
如:
上题中的,public synchronized void fun1()
把fun1()内的synchronized去掉
其它类似
用法与1差不多。。。。不举例了,自己实现
- Java多线程之synchronized
- Java多线程之synchronized
- 多线程之同步Synchronized
- java多线程之synchronized
- 多线程之synchronized
- 多线程之synchronized+方法
- java多线程之synchronized
- Java多线程之synchronized
- Java多线程总结之 synchronized
- javaSE 多线程之同步synchronized
- Java多线程之~~~~synchronized 方法
- 多线程之synchronized关键字详解
- 多线程之synchronized(this)
- (二)java多线程之synchronized
- 多线程之synchronized和volatile
- 多线程之 synchronized 和 volatile
- 【Java基础】多线程之synchronized
- Java多线程之synchronized关键字
- C++实验2-2-分段函数求值
- UVA11080- Place the Guards-(二分图染色)-dfs
- myeclipse中xml文件的配置问题
- 想得到就得努力 (写给以后)
- ftp配置
- 多线程之synchronized
- php常用的字符串格式化函数
- C++引用与指针的区别
- java import、package作用与用法以及与C include的区别
- 关于 dotnetframework不同版本兼容性的屁小的事情
- go简易udp客户端和服务器
- linux命令(文件切割)
- Buy+ VR
- spring xmlbeanfactory加载活动图