Java 同步代码块
精华
小牛编辑
145浏览
2023-03-14
1 什么是Java同步代码块
同步代码块可用于对方法的任何特定资源执行同步。
假设您的方法中有50行代码,但是您只想同步5行,则可以使用synchronized代码块。
如果将方法的所有代码放在同步代码块中,它的效果与同步方法相同。
2 Java同步代码块的要点
- 同步代码块用于锁定任何共享资源的对象。
- 同步代码块的范围小于该方法。
3 Java同步代码块的语法
synchronized (object reference expression) {
//code block
}
4 Java同步代码块的例子1
让我们看一下同步代码块的简单示例。
package cn.xnip;
/**
* 小牛知识库网: https://www.xnip.cn
*/
/**
* Java同步代码块的例子
*/
class Table{
void printTable(int n){
synchronized(this){//synchronized block
for(int i=1;i<=5;i++){
System.out.println(n*i);
try{
Thread.sleep(400);
}catch(Exception e){System.out.println(e);}
}
}
}//end of the method
}
class MyThread1 extends Thread{
Table t;
MyThread1(Table t){
this.t=t;
}
public void run(){
t.printTable(5);
}
}
class MyThread2 extends Thread{
Table t;
MyThread2(Table t){
this.t=t;
}
public void run(){
t.printTable(100);
}
}
public class Demo{
public static void main(String args[]){
Table obj = new Table();//only one object
MyThread1 t1=new MyThread1(obj);
MyThread2 t2=new MyThread2(obj);
t1.start();
t2.start();
}
}
输出结果为:
5
10
15
20
25
100
200
300
400
500
5 Java同步代码块的例子2
使用匿名类编写同步代码块程序:
package cn.xnip;
/**
* 小牛知识库网: https://www.xnip.cn
*/
/**
* Java同步代码块的例子
*/
class Table{
void printTable(int n){
synchronized(this){//synchronized block
for(int i=1;i<=5;i++){
System.out.println(n*i);
try{
Thread.sleep(400);
}catch(Exception e){System.out.println(e);}
}
}
}//end of the method
}
public class Demo{
public static void main(String args[]){
final Table obj = new Table();//only one object
Thread t1=new Thread(){
public void run(){
obj.printTable(5);
}
};
Thread t2=new Thread(){
public void run(){
obj.printTable(100);
}
};
t1.start();
t2.start();
}
}
输出结果为:
5
10
15
20
25
100
200
300
400
500