`
geke260
  • 浏览: 13986 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

方法同步问题

阅读更多
(1)静态方法同步问题:
    Every method of java will have a stack, and every invokation on that method will have it's own 'stack frame'. So the locale data of one method invokation will not affect others.
    Please do not confuse 'synchronization' with 'atomic'.
    If one static method is synchronized, JVM will use the Class as the lock. If not, it acts as an instance method.

(2)当某个线程调用对象的同步方法而获得对象的锁后,其他线程仍能调用该对象的异步方法。同理适用于静态方法的同步。

(3)每个线程都有相互独立的堆栈.

(4)无法访问的线程 有时候虽然获取对象锁没有问题,线程依然有可能进入阻塞状态。在 Java 编程中 IO 就是这类问题最好的例子。当线程因为对象内的 IO 调用而阻塞时,此对象应当仍能被其他线程访问。该对象通常有责任取消这个阻塞的 IO 操作。造成阻塞调用的线程常常会令同步任务失败。如果该对象的其他方法也是同步的,当线程被阻塞时,此对象也就相当于被冷冻住了。其他的线程由于不能获得对象的锁,就不能给此对象发消息(例如,取消 IO 操作)。必须确保不在同步代码中包含那些阻塞调用,或确认在一个用同步阻塞代码的对象中存在非同步方法。尽管这种方法需要花费一些注意力来保证结果代码安全运行,但它允许在拥有对象的线程发生阻塞后,该对象仍能够响应其他线程。

(5)判断是抢占式还是协作式的线程模型,取决于虚拟机的实现者,并根据各种实现而不同。

(6)sleep和yield操作不是释放锁,wait操作释放锁。yield() 方法能够将当前的线程从处理器中移出到准备就绪队列中。这就意味着即使这个线程已经被挂起,等待这个锁释放的其他线程依然不能继续运行。为了缓解这个问题,最好不在同步方法中调用 yield 方法。将那些需要同步的代码包在一个同步块中,里面不含有非同步的方法,并且在这些同步代码块之外才调用 yield 。

(7)Java 多线程支持在版本 1.1 和版本 1.2 中做了重大修订,stop()、suspend() 和 resume() 函数已不提倡使用。这些函数在 JVM 中可能引入微妙的错误。

(8)线程的优先级是从 1 到 10 之间的一个数字,数字越大表明任务越紧急。JVM 标准首先调用优先级较高的线程,然后才调用优先级较低的线程。但是,该标准对具有相同优先级的线程的处理是随机的。如何处理这些线程取决于基层的操作系统策略。
分享到:
评论

相关推荐

    wince同步问题解决方法

    以上就是针对WinCE同步问题的解决方法,涵盖了内存管理、USB同步稳定性、调试中断点问题、来宾模式和开始菜单输入法的控制等方面。在开发WinCE应用程序时,理解并掌握这些技巧可以帮助开发者更有效地调试和优化他们...

    操作系统进程同步问题(吃水果问题)

    操作系统中的进程同步问题是一个复杂而重要的主题,它涉及到多个并发执行的进程之间的协调与通信,以确保系统的正确性和效率。吃水果问题是一个经典的进程同步问题实例,它通常用于教学目的,帮助学生理解如何使用...

    Angular异步变同步处理方法

    Angular异步变同步处理方法是前端开发中用于解决多个接口请求顺序依赖问题的一种技术手段。由于异步操作的特性,它能处理那些按顺序依次执行的接口调用,而不会阻塞主线程,让页面陷入假死状态。在Angular中,主要...

    同步方法和异步方法比较

    在编程领域,同步和异步方法是处理任务执行方式的两种基本模式,它们在系统设计和性能优化中扮演着至关重要的角色。理解这两者的区别及其优缺点对于开发高效的应用至关重要。 **同步方法**指的是调用一个函数或方法...

    3种多线程实现同步方法

    在设计多线程程序时,不仅要考虑同步问题,还要注意减少线程间的上下文切换,避免死锁和饥饿现象,确保程序的健壮性和可维护性。在分析和调试多线程程序时,使用线程调试器或日志记录工具也会有所帮助,以便找出潜在...

    Nodejs让异步变成同步的方法

    Node.js提供了一些方法来解决这个问题。例如,Promises是一种更先进的异步处理机制,它可以将异步操作表示为一个可能尚未完成、但预期未来会完成的值,因此可以使用链式调用来处理异步操作。 从给定文件中的内容来...

    用多进程同步方法解决生产者-消费者问题

    生产者-消费者问题是计算机科学中的一个经典问题,主要涉及多线程或多进程同步。这个问题在操作系统课程中常被用来讲解进程间的通信和同步机制。在这个场景中,我们讨论的是在Linux环境下,如何通过多进程的方式解决...

    Java异步调用转同步方法实例详解

    Java异步调用转同步方法实例详解是指在Java中将异步调用转换为同步调用的技术,主要用于解决异步调用过程中的阻塞问题。异步调用是一种非阻塞的调用方式,调用方在调用过程中,不直接等待返回结果,而是执行其他任务...

    时间同步的测量方法

    - **非相关性问题**:秒脉冲信号与实际时钟同步更新之间可能存在时间间隔,导致难以获得准确的同步误差。 - **额外误差**:秒脉冲信号通常由数字输出产生,这可能引入额外的误差。然而,这些误差只影响到数字输入...

    uniapp 同步方法 实例代码

    标题提到的"uniapp 同步方法 实例代码"是针对这个问题的一个解决方案,即如何将uniapp的onLaunch方法改为同步执行,确保其在页面onLoad之前完成。 `uniapp`是一个基于Vue.js的多端开发框架,可以一次编写,应用于...

    java 同步方法

    【Java 同步方法】是Java编程中处理并发和多线程问题的关键技术,用于确保在多线程环境中对共享资源的正确访问。同步方法通过`synchronized`关键字实现,确保同一时间只有一个线程能够执行特定的方法或代码块,从而...

    网维大师游戏不同步处理方法)同步节点

    本文将深入探讨如何使用“网维大师”来解决游戏不同步问题,特别是关于“同步节点”的处理方法。 首先,理解“同步节点”是非常关键的。在分布式系统中,同步节点是指负责协调和同步不同节点间数据的组件。在游戏...

    单bit信号跨时钟域的方法:电平同步器+边沿同步器+脉冲同步器

    为了解决这个问题,有几种同步技术被广泛使用,包括电平同步器、边沿同步器和脉冲同步器。以下将详细讨论这些同步器的工作原理、设计方法以及它们在Verilog中的实现。 首先,电平同步器(Level Synchronizer)是最...

    java 多线程同步方法的实例

    现在,我们来看一个具体的实例——银行账户转账操作,这是一个典型的多线程同步问题。假设我们有如下类: ```java public class Account { private double balance; public synchronized void deposit(double ...

    用多线程同步方法解决生产者-消费者问题(操作系统课设

    多线程同步方法解决生产者-消费者问题 多线程同步方法是解决生产者-消费者问题的常用方法。生产者-消费者问题是操作系统中经典的问题之一,它是指在多线程环境下,多个生产者线程和消费者线程访问同一个共享缓冲区...

    同步问题之医生看病问题

    在这个“同步问题之医生看病问题”的例子中,我们将使用Java图形界面来模拟一个简单的同步模型。 首先,我们来看问题的描述:病人到医院看病,如果病椅有空位,他们可以直接就诊;如果病椅满了,但等椅还有空位,...

    异步时钟域同步化处理方法

    当数据需要从一个时钟域传递到另一个时钟域时,就可能出现同步问题。 1. **边沿检测法**:这是最基本的异步时钟域同步方案,通过在接收端设置两个触发器,分别对发送端时钟的上升沿和下降沿进行采样。这种方法虽然...

    delphi中线程同步问题

    本文将深入探讨 `Synchronize` 的工作原理,并提出解决 DLL/ActiveForm 中线程同步问题的策略。 `Synchronize` 的实现基于事件和线程同步原语。当一个非主线程调用 `Synchronize` 时,它会创建一个同步记录结构,...

Global site tag (gtag.js) - Google Analytics