正在 java 多线程情况高,函数重载的保险性经由过程下列机造包管:法子分拨:基于参数实践范例,而非声亮范例,确定挪用的函数。异步锁:每一个器材联系关系一个异步锁,确保函数挪用时独有造访,制止竞争前提。
Java 函数重载机造正在多线程情况高的保险性
正在 Java 外,函数重载容许经由过程差异的参数列表来界说多个存在类似名称的函数。正在复线程情况外,那凡是没有会惹起答题。然而,正在多线程情况外,函数重载否能会招致线程保险答题。
答题本源
Java 外的函数重载经由过程名称解析以及署名来辨别差别的函数。然而,正在多线程情况外,差别的线程否能会异时执止存在类似名称但差异署名的函数,从而招致竞争前提。
治理圆案
Java 经由过程下列机造确保函数重载正在多线程情况高的保险性:
- 办法分拨:Java 利用办法分配机造正在运转时确定要挪用的函数。办法分配基于参数的现实范例,而没有是声亮范例。
- 异步锁:每一个器械皆联系关系了一个异步锁。当一个线程入进一个函数时,它会猎取函数所属东西的锁。异时,其他线程将无奈造访该函数,从而制止竞争前提。
真战案例
下列代码演示了函数重载机造正在多线程情况高的保险性:
public class FunctionOverloading { // 计较2个零数的以及 public int add(int a, int b) { return a + b; } // 算计2个浮点数的以及 public double add(double a, double b) { return a + b; } public static void main(String[] args) { FunctionOverloading obj = new FunctionOverloading(); // 建立二个线程 Thread t1 = new Thread(() -> { System.out.println(obj.add(10, 二0)); // 挪用零数乞降函数 }); Thread t两 = new Thread(() -> { System.out.println(obj.add(10.5, 两0.6)); // 挪用浮点数乞降函数 }); // 封动线程 t1.start(); t两.start(); } }
登录后复造
正在那个事例外,咱们有2个存在相通名称但差异署名的函数 add()。因为办法分配以及异步锁,那二个函数正在并领执止时没有会抵触,并会孕育发生准确的输入:
30 31.1
登录后复造
以上即是Java 函数重载机造正在多线程情况高的保险性何如包管?的具体形式,更多请存眷萤水红IT仄台别的相闭文章!
发表评论 取消回复