这是否意味着两个线程不能同时更改基础数据?或者它是否意味着当多个线程运行时,给定的代码段将以可预测的结果运行?
language-agnostic concurrency multithreading programming-languages
可能重复:
线程安全是什么意思?
我很困惑任何类都是Thread安全的.我理解,如果任何类是线程安全的,那么它的方法有一些特定的(同步).是对还是错?请帮助我详细说明它的含义.
我正在阅读Sun关于并发的教程.
但我无法准确理解内存一致性错误是什么?我搜索了一下,但没有找到任何有用的教程或文章.
我知道这个问题是主观的,所以你可以给我链接到上述主题的文章.
如果你用一个简单的例子解释它会很棒.
我试图只为1个方法生成一个线程.我得到了IllegalStateException
(见下文).这个方法接受数据库连接和数据库名称,它将从中生成XML.(那部分可行,我只是想通过一个新线程让它更快,因为我有多个XML文件要创建.
Thread table = new Thread(new Runnable() {
public void run() {
try {
System.out.println("starting");
tableXml(tableConn, dbName);
System.out.println("ending");
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
table.start();
Run Code Online (Sandbox Code Playgroud)
例外:
java.lang.IllegalStateException: Current state = RESET, new state = FLUSHED
at java.nio.charset.CharsetEncoder.throwIllegalStateException(CharsetEncoder.java:951)
at java.nio.charset.CharsetEncoder.flush(CharsetEncoder.java:640)
at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:769)
at com.informix.lang.JavaToIfxType.doConversion(JavaToIfxType.java:841)
at com.informix.lang.JavaToIfxType.JavaToIfxChar(JavaToIfxType.java:145)
at com.informix.jdbc.IfxVarChar.toString(IfxVarChar.java:247)
at com.informix.jdbc.IfxResultSet.getString(IfxResultSet.java:742)
at com.informix.jdbc.IfxResultSet.getString(IfxResultSet.java:785)
at org.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:225)
at com.test.ex.ExportTask$1.run(ExportTask.java:151)
at java.lang.Thread.run(Thread.java:662)
Run Code Online (Sandbox Code Playgroud)
导致异常的代码行是a resultSet.executeQuery();
所以问题是:我做错了什么?
感谢您的帮助,如果您需要信息,请与我们联系
我已经阅读了他对 Singleton 的基本 Java 实现,因为我将在我的课堂上介绍设计模式:
public final class ClassSingleton {
private static ClassSingleton INSTANCE;
private String info = "Initial info class";
private ClassSingleton() {
}
public static ClassSingleton getInstance() {
if(INSTANCE == null) {
INSTANCE = new ClassSingleton();
}
return INSTANCE;
}
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
用过几次,对它很熟悉。然而,当我深入研究这个话题时,我发现这个版本根本不是线程安全的。
这究竟是什么意思?如果多个线程访问它并创建一个新实例,是否会创建更多不同的实例?或者“安全”在哪里不复存在?
感谢您提前回答。