小编hua*_*hui的帖子

在什么情况下CopyOnWriteArrayList适合?

我正在学习CopyOnWriteArrayList类.

  • 复制新阵列的目的是什么?
  • 是否其他线程读取数组?

因此,如果系统具有高并发性并且大多数线程的操作都在读取而不是写入,则最好使用它CopyOnWriteArrayList.

java collections

74
推荐指数
2
解决办法
6万
查看次数

什么是"T是顶级类,并且在词典中嵌套在T中的断言语句被执行." 意思?

我正在学习"类和接口的初始化",它说"T是一个顶级类,并且在T中执行词法嵌套的断言语句." 任何人都可以告诉我"T是一个顶级类,并且执行一个词法嵌套在T中的断言语句." 举个例子?

这句话来自JLS,原文是这样的:

类或接口类型T将在第一次出现以下任何一个之前立即初始化:

  • T是一个类,并且创建了T的实例.
  • T是一个类,并且调用由T声明的静态方法.
  • 分配由T声明的静态字段.
  • 使用由T声明的静态字段,该字段不是常量变量(第4.12.4节).
  • T是顶级类,并且执行在词典内嵌套在T中的断言语句(第14.10节).

java

13
推荐指数
1
解决办法
469
查看次数

在这个linux命令中" - "是什么意思?

我正在学习linux的cat命令,我找到了这个命令:

$ echo 'Text through stdin' | cat - file.txt
Run Code Online (Sandbox Code Playgroud)

" - "在这里意味着什么?如果我不输入,则不会显示"Text through stdin".

linux cat

5
推荐指数
2
解决办法
2364
查看次数

当我添加 @Async 时,entityManager.flush() 将引发异常

我正在使用 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一切都很好。

\n\n

但为了提高性能,我@Async在Service类中添加了。\n然后当我调用时会引发异常entityManager.flush()

\n\n
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)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我调试了源码,发现EntityManager是通过ThreadLocal绑定到线程的,但是当我添加@Async时,就会出现一个新的线程,这个新的线程会创建一个新的EntityManager,就可以了。但是当我调用entityManager.flush()时,它会检查Transaction和调用JdbcResourceLocalTransactionCoordinatorImpl.isJoined()方法physicalTransactionDelegate是否为null,因此会引发异常。

\n\n

physicalTransactionDelegate在主线程中初始化。

\n\n

如果我想执行entityManager.flush()该怎么办?还是我对来源的理解有误?

\n\n

控制器.java

\n\n …

java spring hibernate transactions

5
推荐指数
1
解决办法
2412
查看次数

当我新建一个Hashtable时,为什么要调用put方法?

我正在阅读代码Hashtable并且感到困惑并且有一些问题.我这样编码:

Hashtable table = new Hashtable();
table.put(table, 1);
int code = table.hashCode();
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 当我hashCode像第三行代码一样调用方法时,为什么它不是无限循环?我认为这是一个无限循环.

  2. 当我调试这段代码时,我发现代码new Hashtable()会导致调用put方法,为什么?

java hashtable

4
推荐指数
1
解决办法
114
查看次数

如果我想将一些字符更改为空,那会翻译的功能会怎么做?

我有一个sql语句:

select translate('abcdefg', 'abc', '') from dual;
Run Code Online (Sandbox Code Playgroud)

为什么结果什么都没有?我认为它应该是'defg'.

oracle translate

4
推荐指数
1
解决办法
540
查看次数

为什么静态内部类单例线程安全

正如标题所说,为什么静态嵌套类单例线程安全?

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)

java

3
推荐指数
2
解决办法
2万
查看次数

C#compareto方法如何比较字符串

我想知道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)

为什么结果不同?

c# compareto

3
推荐指数
1
解决办法
328
查看次数

关于linux shell的tr命令的错误

当我输入这个命令时:

$ echo 1234567890 | tr '9-0' '9876'
Run Code Online (Sandbox Code Playgroud)

它说“tr:'9-0'的范围端点处于反向整理序列顺序”。这是什么意思?这是否意味着我只能输入“0-9”?

linux shell tr

2
推荐指数
1
解决办法
3568
查看次数

标签 统计

java ×5

linux ×2

c# ×1

cat ×1

collections ×1

compareto ×1

hashtable ×1

hibernate ×1

oracle ×1

shell ×1

spring ×1

tr ×1

transactions ×1

translate ×1