多线程——同步代码块和同步方法

**什么时候需要同步?
1.当多线程并发,有多段代码同时执行时,我们希望某一段代码执行的过程中CPU不要切换到其他线程工作,这时就需要同步。
2.如果两段代码是同步的,那么同一时段只能执行一段,在一段代码没有执行结束之前,不会执行另外一段代码。
**

同步代码块

1.使用synchronized关键字加上一个锁对象来定义一段代码,这就叫同步代码块
2.多个同步代码块如果使用相同的锁对象,那么他们就是同步的

同步方法

1.使用synchronized关键字修饰一个方法,该方法中所有的代码都是同步的
2.非静态同步函数的锁是this
3.静态同步函数的锁是:字节码对象(xx.chass)

案例:火车站买票问题

public static void main(String[] args){
//创建买票任务
TicketTask task=new TicketTask();
Thread t1=new Thread(task);
t1.setName("窗口A");
Thread t2=new Thread(task);
t2.setName("窗口B");
Thread t3=new Thread(task);
t3.setName("窗口C");
Thread t4=new Thread(task);
t4.setName("窗口D");
//开启线程
t1.start();
t2.start();
t3.start();
t4.start();
}
class TicketTask implements Runnable{
int ticket=100;
public void run(){
while(true){
sychronized(this){//同步:加锁
if(ticket<=0){
System.out.println("不好意思,票已经卖完了。。。");
break;
}else{
System.out.println(Thread.currentThread()+"恭喜你买到票,票号"+ticke);
ticket--;
}
}
}
}
}
发布了89 篇原创文章 · 获赞 0 · 访问量 1551

猜你喜欢

转载自blog.csdn.net/ShiZaolin/article/details/104204051