Java 从全局变量读写
我想做的是有一个全局变量类和函数可以从/到读/写 我现在拥有的是Java 从全局变量读写,java,arrays,global,Java,Arrays,Global,我想做的是有一个全局变量类和函数可以从/到读/写 我现在拥有的是 import java.lang.*; import lab1.Global; public class SecondProgram { public static void main ( String args[] ) { System.out.println("hi "); Global.b[0] = " zero ";
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;
}
当然,重要的是数组的大小不是一个硬编码的常量,而是一个变量,我可以在某个时候找到它并插入
我希望您能从代码中看到我正在尝试做什么,并且您知道如何使其工作
谢谢 我认为这是一种更好的方法,可以让你开始
import java.util.ArrayList;
public class SecondProgram {
private static ArrayList <String>file = new ArrayList();
public synchronized boolean writeFile(String str){
//wrtite file to your list
file.add(str);
return true;
}
public static void main(String args[]) {
//read file and use the synchronized method to write it to your list
}
}
import java.util.ArrayList;
公营二等课程{
私有静态ArrayList文件=新ArrayList();
公共同步布尔写文件(字符串str){
//将文件写入您的列表
文件.add(str);
返回true;
}
公共静态void main(字符串参数[]){
//读取文件并使用同步方法将其写入列表
}
}
我认为这是一种更好的方法,可以让您开始
import java.util.ArrayList;
public class SecondProgram {
private static ArrayList <String>file = new ArrayList();
public synchronized boolean writeFile(String str){
//wrtite file to your list
file.add(str);
return true;
}
public static void main(String args[]) {
//read file and use the synchronized method to write it to your list
}
}
import java.util.ArrayList;
公营二等课程{
私有静态ArrayList文件=新ArrayList();
公共同步布尔写文件(字符串str){
//将文件写入您的列表
文件.add(str);
返回true;
}
公共静态void main(字符串参数[]){
//读取文件并使用同步方法将其写入列表
}
}
我需要全局变量,因为我让线程将文本文件中的数据读取到数组中,而且在线程完成其工作后,数组及其数据保持存在是很重要的
那不行。或者至少,它不会可靠地工作(从某种意义上说,这是一个更糟糕的结果!)
在多线程Java程序中,您需要确保线程在信息从一个线程传递到另一个线程时正确同步。同步的目的有两个:
- 防止种族状况;i、 e.一个线程试图在另一个线程读取某个值之前读取该值,以及
- 确保线程不会因内存缓存效应而看到过时的值副本
- 注意上面的注释,并使用类来封装状态
- 使用
中的实用程序类来实现共享数据结构。。。并处理线程创建/管理。以ExecutorService API为例java.util.concurrent
- 找一本关于Java并发编程的好教材。Java中的并发性并不简单,如果您不知道自己在做什么,您可以花费数小时/天/周/月来跟踪间歇性故障的原因
- 防止种族状况;i、 e.一个线程试图在另一个线程读取某个值之前读取该值,以及
- 确保线程不会因内存缓存效应而看到过时的值副本
- 注意上面的注释,并使用类来封装状态
- 使用
中的实用程序类来实现共享数据结构。。。并处理线程创建/管理。以ExecutorService API为例java.util.concurrent
- 找一本关于Java并发编程的好教材。Java中的并发性并不简单,如果您不知道自己在做什么,您可以花费数小时/天/周/月来跟踪间歇性故障的原因
列表
)。然后在所有线程完成工作后阅读该集合
收集数据的全局数据库:
public class GlobalDataBroker {
public static List<List<String>> data = Collections.synchronizedList(new LinkedList<List<String>>());
}
请注意,您应该只在完成数据编写后才开始对其进行迭代。(否则,您可能会遇到可怕的
ConcurrentModificationException
)我不主张使用全局变量,但如果您必须这样做,您可以执行以下操作。一般来说:让每个线程建立自己的数据。完成工作后,将其数据添加到同步的全局集合(在本例中为列表
)。然后在所有线程完成工作后阅读该集合
收集数据的全局数据库:
public class GlobalDataBroker {
public static List<List<String>> data = Collections.synchronizedList(new LinkedList<List<String>>());
}
请注意,您应该只在完成数据编写后才开始对其进行迭代。(否则,您可能会遇到可怕的
ConcurrentModificationException
)为什么需要全局变量?如果您担心数组的大小,请使用列表?我认为您将java与其他语言混淆了,这不是我们在java中的做法。我的意见是你应该重新设计你的程序。你到底想做什么?也许比globals更好的方法是某种ThreadManager
类,它有一个FileData
对象的列表,其中一个对象被传递到每个Thread
以添加其数据。线程完成后,ThreadManager
可以遍历数据t