我创建了3个线程,它们正在访问ThreadSaroundinnerClasss
外部类的内部类MyInnerClass
。
package com.test; public class ThreadsAroundInnerClasses { public static void main(String[] args) { Thread t1 = new Thread(new MyThread(), "THREAD-1"); Thread t2 = new Thread(new MyThread(), "THREAD-2"); Thread t3 = new Thread(new MyThread(), "THREAD-3"); t1.start(); t2.start(); t3.start(); } static class MyInnerClass { static int counter = 0; public void printIt(String threadName) { System.out.println("I am inside inner class, counter value is " + ++counter + " and thread name is " + threadName); } } } class MyThread implements Runnable { @Override public void run() { ThreadsAroundInnerClasses.MyInnerClass innerObj = new ThreadsAroundInnerClasses.MyInnerClass(); innerObj.printIt(Thread.currentThread().getName()); } }
在输出中,我可以看到MyInnerClass
类中的counter
静态变量没有按顺序更新。
I am inside inner class, counter value is 1 and thread name is THREAD-1 I am inside inner class, counter value is 3 and thread name is THREAD-2 I am inside inner class, counter value is 2 and thread name is THREAD-3
如果有人能解释在多线程情况下如何处理内部类,将会有很大帮助?我们能同步整个内部类吗?
事先谢谢你的帮助。
试试看:
static class MyInnerClass {
static int counter = 0;
public void printIt(String threadName) {
synchronized(MyInnerClass.class) {
System.out.println("I am inside inner class, counter value is " + ++counter + " and thread name is " + threadName);
}
}
}
您的计数器是静态的,因此需要在整个类对象上进行同步。
类是否是内部类是不相关的。您在这里看到的是预期的输出:您的程序中没有任何同步,因此线程调度程序可以在需要时自由切换到其他线程。下面是一个可能的操作序列,它将导致您看到的输出。
如果您希望计数器增量、级联和打印是原子操作,那么您应该确保它在唯一锁上同步:
synchronized MyInnerClass.class {
System.out.println("I am inside inner class, counter value is " + ++counter + " and thread name is " + threadName);
}
本文向大家介绍PHP多线程之内部多线程实例分析,包括了PHP多线程之内部多线程实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了PHP多线程之内部多线程用法。分享给大家供大家参考。具体如下: 希望本文所述对大家的php程序设计有所帮助。
我有一个应用程序,它有一个ConcurrentHashMap本地存储一个存储在外部服务器上的数据副本。地图每隔几秒钟就会更新一次数据的新副本。 我有一个循环,每隔几秒钟运行一次,它可以访问HashMap并按照值的顺序将元素添加到数组中(实际上它做的事情还多一些,但这并不相关)。我的问题是,如果数据在创建数组的过程中发生了变化,您可能会在不同的地方有重复的键,或者完全省略一些键。 示例: 如您所见,
如何从多个线程同时访问静态变量。 如果我有这样的课 我需要访问线程1的值,比如 从线程2中,我需要设置如下值 这会导致内存冲突吗?。如果是,建议使用什么方法来处理这种情况?。
问题内容: 我正在努力加快某些过程的执行速度,这些过程将大量记录(大多数是几百万个)发布到Elasticsearch。在我的C#代码中,我已经使用Dataflow实现了一个多线程解决方案,如下所示: 然后我要实现的发送批量请求调用: 我的问题 ,你 是对的实用性存在的数据流管道的一部分的锁内执行额外的线程。 这个可以吗?我可以在性能,执行,缓存/内存丢失等方面看到任何潜在的问题吗? 任何见识都会很
我有两个不同的微服务,将尤里卡作为服务注册表,现在我正在尝试从另一个微服务调用微服务,解析带有功能区的endpoint以进行客户端负载平衡。 服务A: 此服务公开一个终结点,并且应用程序.yml 如下所示: 调用服务A的服务B具有以下应用程序类: 控制器 服务 但我在尝试访问服务时遇到了一个异常: 对此有什么建议吗?
问题内容: 我正在尝试使用docker-compose启动kafka服务,并且应该可以在docker内部和外部进行访问。因此,应该在内部和外部设置合适的广告客户: 问题是,当我尝试从群集外部进行连接时,节点名称不是127.0.0.1,而是内部主机名: 这不是KAFKA_ADVERTISED_LISTENERS和KAFKA_LISTENERS处理这种情况的目的吗?我尝试设置KAFKA_ADVERTI