我要做的是有一个全局变量类和函数可以从/到读/写。
我现在拥有的是
import java.lang.*;
import lab1.Global;
public class SecondProgram {
public static void main ( String args[] ) {
System.out.println("hi ");
Global.b[0] = " zero ";
Global.b[1] = " One ";
Global.b[2] = " Two ";
Global.b[3] = " Three ";
}
}
我创建了一个类来存储全局变量
public class Global {
public static String a = "hi" ;
public static String [] b;
}
当然,重要的是数组的大小不是一个硬编码的常量,而是一个变量,我可以在某个时候找到它并插入。
我希望你能从代码中看到我在做什么,你知道如何让它工作。
谢谢!
3条答案
按热度按时间bwntbbo31#
我认为这是一个更好的方法,可以让你开始。。。。
eoigrqb62#
我需要全局变量,因为我让线程将文本文件中的数据读取到数组中,在线程完成工作后,数组及其数据保持在当前状态非常重要。
那不行。或者至少,它不会可靠地工作(从某种意义上说,这是一个更糟糕的结果!)
在多线程java程序中,您需要确保线程在信息从一个线程传递到另一个线程时正确同步。同步的目的有两个:
防止种族歧视;i、 e.一个线程在另一个线程读取某个值之前尝试读取该值,并且
以确保线程不会由于内存缓存效应而看到值的过时副本。
同步光秃秃的全局变量将是非常困难的。我的建议是
注意上面的注解,并使用类来封装状态。
使用中的实用程序类
java.util.concurrent
要实现共享数据结构。。。并处理线程创建/管理。以executorservice api为例,找一本关于java并发编程的好教材。java中的并发并不简单,如果您不知道自己在做什么,您可以花费数小时/数天/数周/数月的时间来跟踪间歇性故障的原因。
flvtvl503#
我不提倡使用globals,但是如果必须的话,可以做如下的事情。一般来说:让每个线程建立自己的数据。完成工作后,将其数据添加到同步的全局集合(在本例中为
List<List<String>>
). 然后在所有线程完成工作后阅读该集合。收集数据的全局数据库:
示例实现:
输出:
请注意,只有在完成数据的编写之后,才应该开始对其进行迭代(否则,你可能会遇到恐惧
ConcurrentModificationException
.)