线程同步的机制是用来解决线程安全问题的
操作同步代码时,只能有一个线程参与,其他线程等待。相当于是一个单线程的过程,效率低。
1、Java中同步机制有一下几种方式
1.1、方式一:同步代码块(处理实现Runnable安全问题,Thread实现类实现的话,需要加static保证当前对象的唯一性)
synchronized(同步监视器){
//需要被同步的代码
}
说明: 1、操作共享数据的代码,即为需要被同步的代码
2、共享数据:多个线程共同操作的变量。比如:ticket就是共享数据。
3、同步监视器:俗称锁。任何一个类的对象,都可以充当锁。
要求: 多个线程必须要公用同一把锁
案例(窗口取票案例):
class Windows implements Runnable{
private int tickets = 100;
private Object ob = new Object(); //线程的同一把锁,即同一个对象
@Override
public void run() {
while (true) {
synchronized(ob) {
//通过synchronized来加锁
if (tickets > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":买票,票号为:" + tickets);
tickets--;
} else {
break;
}

本文详细介绍了Java中三种线程同步机制:同步代码块、同步方法以及JDK5.0引入的Lock锁。同步代码块和同步方法用于解决线程安全问题,确保共享数据在多线程环境中的正确操作。Lock锁提供了更灵活的控制,增强了并发性能。
最低0.47元/天 解锁文章
&spm=1001.2101.3001.5002&articleId=105128764&d=1&t=3&u=cfbb9b1da6774c53be3882e045a51ea4)
1111

被折叠的 条评论
为什么被折叠?



