java线程---同步方法

关键字synchronized方法方法上修饰,那么该方法就是同步方法。

同步方法分为 :非静态同步方法和静态同步方法。

代码如下:

非静态同步方法

package sx.test.thread;
public class Demo4 {
public static void main(String[] args) {
final Print2 p = new Print2();
//匿名内部类
new Thread("线程1---"){
public void run() {
for(int i=0;i<20;i++){
p.print1();
}
}
}.start();
//匿名内部类
new Thread("线程2---"){
public void run() {
for(int i=0;i<20;i++){
p.print2();
}
}
}.start();
}
}
class Print2{
//无论是同步代码块还是同步方法,他们必须要保证锁对象是一致的。
Demo4 d = new Demo4();
public synchronized void print1(){
System.out.print("床");
System.out.print("前");
System.out.print("明");
System.out.print("月");
System.out.print("光");
System.out.print("\r\n");
}
public void print2(){  
synchronized(this){    //非静态同步方法的锁对象必须是this
System.out.print("疑");
System.out.print("似");
System.out.print("地");
System.out.print("上");
System.out.print("霜");
System.out.print("\r\n");
}
}
}

静态同步方法

package sx.test.thread;
public class Demo5 {
public static void main(String[] args) {
final Print3 p = new Print3();
//匿名内部类
new Thread("线程1---"){
public void run() {
for(int i=0;i<20;i++){
p.print1();
}
}
}.start();
//匿名内部类
new Thread("线程2---"){
public void run() {
for(int i=0;i<20;i++){
p.print2();
}
}
}.start();
}
}
class Print3{
//无论是同步代码块还是同步方法,他们必须要保证锁对象是一致的。
Demo5 d = new Demo5();
public static synchronized void print1(){
System.out.print("床");
System.out.print("前");
System.out.print("明");
System.out.print("月");
System.out.print("光");
System.out.print("\r\n");
}
public static void print2(){
//静态同步方法的锁对象是类名.class
synchronized(Print3.class){    //静态方法随着类的加载而加载,而类的加载是有对象的,即类的字节码对象:类名.class
System.out.print("疑");
System.out.print("似");
System.out.print("地");
System.out.print("上");
System.out.print("霜");
System.out.print("\r\n");
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值