Ad-hoc的含义--《Java并发编程实战》

Source

《Java并发编程实战》3.3.1章出现了一个词:Ad-hoc
翻译非常难懂:
Ad-hoc线程封闭是指,维护线程封闭性的职责完全由程序实现来承担。Ad-hoc线程封闭是非常脆弱的,因为没有任何一种 语言特性,例如可见性修饰符或局部变量,能将对象封闭到目标线程上。事实上,对线程封闭对象(例如,GUI应用程序中的可视化组件或数据模型等)的引用通常保存在公有变量中。

我的理解:
Ad-hoc翻译为特定的。

如何理解 Ad-hoc线程封闭?

1.首先什么是线程封闭性?
答:仅在单线程内访问数据,就不需要同步。这种技术被称为线程封闭

2.如何维护线程封闭性?
答:保证对象的使用被限制在单线程中。

3.维护线程封闭性的职责完全由程序实现来承担
答:程序员自己写代码把对象限制在单个线程上。

国外的网站几乎都像复读机似的重复这句话:
程序员自己负责把对象限制在(目标)线程上。
在这里插入图片描述
在这里插入图片描述
看到这里我还是一头雾水,程序员自己去实现,能否举一个例子?
我搜到一个国外网站stackoverflow的例子

The most ad-hoc way of thread confiment is by simply saying/documenting in a plain language (like English) to other programmers that they should not access a specific object.
大多数"特定"方式是简单地以通俗易懂的语言(例如英语)对其他程序员说/记录他们不应该访问特定的对象。

So an example could be as simple as documenting something like this:
一个简单的例子就是记录这样的东西

// Don't use this object in other threads than Thread X
//不要在线程X之外的其他线程中使用该对象
private SomeType someObject;
public SomeType getSomeObject() {
    
       return someObject; }

or

// Don't modify this from any other thread than Thread X.
//除线程X之外,不要从其他任何线程修改此内容
// So use it read-only for those other threads.
//以只读方式用于其他线程。
private volatile int someNumber;

总结一下:通过写注释等其它方式,告诉自己或者其他开发人员,不应该在别的线程访问特定的对象。应该算是一种约定。所以本书作者才说:Ad-hoc线程封闭是非常脆弱的,毕竟连语法特性都没用上。

我看了Ad-hoc只在本书这一页出现,说白了直接跳过也不影响书后面的阅读。而且书中提到,这种方式非常不推荐使用,推荐使用栈封闭和ThreadLocal类
🤮