我正在学习CopyOnWriteArrayList类.
因此,如果系统具有高并发性并且大多数线程的操作都在读取而不是写入,则最好使用它CopyOnWriteArrayList.
我正在学习"类和接口的初始化",它说"T是一个顶级类,并且在T中执行词法嵌套的断言语句." 任何人都可以告诉我"T是一个顶级类,并且执行一个词法嵌套在T中的断言语句." 举个例子?
这句话来自JLS,原文是这样的:
类或接口类型T将在第一次出现以下任何一个之前立即初始化:
- T是一个类,并且创建了T的实例.
- T是一个类,并且调用由T声明的静态方法.
- 分配由T声明的静态字段.
- 使用由T声明的静态字段,该字段不是常量变量(第4.12.4节).
- T是顶级类,并且执行在词典内嵌套在T中的断言语句(第14.10节).
我正在学习linux的cat命令,我找到了这个命令:
$ echo 'Text through stdin' | cat - file.txt
Run Code Online (Sandbox Code Playgroud)
" - "在这里意味着什么?如果我不输入,则不会显示"Text through stdin".
我正在使用 Spring 框架。
\n\n我的项目的结构是Controller \xe2\x9e\xa1\xef\xb8\x8f Service \xe2\x9e\xa1\xef\xb8\x8f Logic。
\n\n我@Transactional在逻辑课中添加了。我正在使用 EntityManager 进行数据库操作。每次数据库操作(选择、更新...)之后,我都会调用entityManager.flush()方法。\n一切都很好。
但为了提高性能,我@Async在Service类中添加了。\n然后当我调用时会引发异常entityManager.flush()。
javax.persistence.TransactionRequiredException: no transaction is in progress\n at org.hibernate.internal.SessionImpl.checkTransactionNeeded(SessionImpl.java:3505)\n at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1427)\n at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1423)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:350)\n at com.sun.proxy.$Proxy150.flush(Unknown Source)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:305)\n at com.sun.proxy.$Proxy150.flush(Unknown Source)\nRun Code Online (Sandbox Code Playgroud)\n\n我调试了源码,发现EntityManager是通过ThreadLocal绑定到线程的,但是当我添加@Async时,就会出现一个新的线程,这个新的线程会创建一个新的EntityManager,就可以了。但是当我调用entityManager.flush()时,它会检查Transaction和调用JdbcResourceLocalTransactionCoordinatorImpl.isJoined()方法physicalTransactionDelegate是否为null,因此会引发异常。
physicalTransactionDelegate在主线程中初始化。
如果我想执行entityManager.flush()该怎么办?还是我对来源的理解有误?
\n\n控制器.java
\n\n …我正在阅读代码Hashtable并且感到困惑并且有一些问题.我这样编码:
Hashtable table = new Hashtable();
table.put(table, 1);
int code = table.hashCode();
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
当我hashCode像第三行代码一样调用方法时,为什么它不是无限循环?我认为这是一个无限循环.
当我调试这段代码时,我发现代码new Hashtable()会导致调用put方法,为什么?
我有一个sql语句:
select translate('abcdefg', 'abc', '') from dual;
Run Code Online (Sandbox Code Playgroud)
为什么结果什么都没有?我认为它应该是'defg'.
正如标题所说,为什么静态嵌套类单例线程安全?
public class Singleton
{
private static class SingletonHolder
{
public static Singleton instance = null;
public static Singleton getInstance(){
if (null == instance) {
instance = new Singleton();
}
}
}
public static Singleton getInstance()
{
return SingletonHolder.getInstance();
}
}
Run Code Online (Sandbox Code Playgroud) 我想知道C#的CompareTo方法如何比较两个字符串,所以我测试了这样:
string str1 = "0";
string str2 = "-";
Console.WriteLine(str1.CompareTo(str2)); // output : 1
string str3 = "01";
string str4 = "-1";
Console.WriteLine(str3.CompareTo(str4)); // output : -1
Run Code Online (Sandbox Code Playgroud)
为什么结果不同?
当我输入这个命令时:
$ echo 1234567890 | tr '9-0' '9876'
Run Code Online (Sandbox Code Playgroud)
它说“tr:'9-0'的范围端点处于反向整理序列顺序”。这是什么意思?这是否意味着我只能输入“0-9”?