page contents
Nen
Nen - 程序员

性别: 天津 - 天津市 注册于 2021-06-23

向TA求助
2850金币数
43180 经验值
1个粉丝
主页被访问 6256 次

3096 个回答

0 赞同

形成死锁的四个必要条件是什么?

互斥条件:线程(进程)对于所分配到的资源具有排它性,即一个资源只能被一个线程(进程)占用,直到被该线程(进程)释放 请求与保持条件:一个线程(进程)因请求被占用资源而发生阻塞时,对已获得的资源保持不放。 不剥夺条件:线程(进程)已获得的资源在末使用完之前不能被其他线程强行剥夺,只有自己使用完毕后才释放资源。...

回答于 2022-04-25 15:58

0 赞同

Java Concurrency API 中的 Lock 接口(Lock interface)是什么?...

Lock 接口比同步方法和同步块提供了更具扩展性的锁操作。他们允许更灵活的结构,可以具有完全不同的性质,并且可以支持多个相关类的条件对象。 它的优势有:     可以使锁更公平     可以使线程在等待锁的时候响应中断     可以让线程尝试获取锁,并在无法获取锁的时候立即返回或者等待一段时间     可以在不同的范围...

回答于 2022-04-25 15:51

0 赞同

当一个线程进入一个对象的一个 synchronized 方法后,其它线程是...

    其他方法前是否加了 synchronized 关键字,如果没加,则能。     如果这个方法内部调用了 wait,则可以进入其他 synchronized 方法。     如果其他个方法都加了 synchronized 关键字,并且内部没有调用 wait,则不能。     如果其他方法是 static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静...

回答于 2022-04-15 14:56

0 赞同

同步方法和同步块,哪个是更好的选择?

同步块是更好的选择,因为它不会锁住整个对象(当然你也可以让它锁住整个对象)。同步方法会锁住整个对象,哪怕这个类中有多个不相关联的同步块,这通常会导致他们停止执行并需要等待获得这个对象上的锁。 同步块更要符合开放调用的原则,只在需要锁住的代码块锁住相应的对象,这样从侧面来说也可以避免死锁。 请知道一条...

回答于 2022-04-15 14:56

0 赞同

什么是线程同步和线程互斥,有哪几种实现方式?

当一个线程对共享的数据进行操作时,应使之成为一个"原子操作",即在没有完成相关操作之前,不允许其他线程打断它,否则,就会破坏数据的完整性,必然会得到错误的处理结果,这就是线程的同步。 在多线程应用中,考虑不同线程之间的数据同步和防止死锁。当两个或多个线程之间同时等待对方释放资源的时候就会形成线程之间的...

回答于 2022-04-15 14:55

0 赞同

synchronized 的作用?

在 Java 中,synchronized 关键字是用来控制线程同步的,就是在多线程的环境下,控制 synchronized 代码段不被多个线程同时执行。synchronized 可以修饰类、方法、变量。 另外,在 Java 早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的 Mutex Lock 来实现的,Java 的线...

回答于 2022-04-15 14:55

0 赞同

synchronized如何使用?

主要的三种使用方式:     修饰实例方法: 作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁     修饰静态方法: 也就是给当前类加锁,会作用于类的所有对象实例,因为静态成员不属于任何一个实例对象,是类成员( static 表明这是该类的一个静态资源,不管new了多少个对象,只有一份)。所以如果一个线程A调...

回答于 2022-04-15 14:55

0 赞同

如何使用synchronized实现单例?有那些注意点?

可以通过双重校验锁实现对象单例,代码如下: public class Singleton {     private volatile static Singleton uniqueInstance;     private Singleton() {     }     public static Singleton getUniqueInstance() {        //先判断对象是否已经实例过,没有实例化过才进入加锁代码         if (uniqueInstance =...

回答于 2022-04-15 14:54

0 赞同

什么是自旋?

很多 synchronized 里面的代码只是一些很简单的代码,执行时间非常快,此时等待的线程都加锁可能是一种不太值得的操作,因为线程阻塞涉及到用户态和内核态切换的问题。既然 synchronized 里面的代码执行得非常快,不妨让等待锁的线程不要被阻塞,而是在 synchronized 的边界做忙循环,这就是自旋。如果做了多次循环发现还没...

回答于 2022-04-15 14:53

0 赞同

线程 B 怎么知道线程 A 修改了变量?

    volatile 修饰变量     synchronized 修饰修改变量的方法     wait/notify     while 轮询

回答于 2022-04-15 14:53