我正在阅读关于线程的内容,并且在很多书中都说Java支持语言级别和高级别的线程通过java.util.concurrent
包。
在语言层面支持线程有什么意义?
我认为Erlang是一种支持语言级别线程的语言......
答案 0 :(得分:7)
在语言级别支持线程意味着该语言为多线程提供了一流的支持,而不是仅通过类库提供第二类支持。
在Java中,语言级别支持使用synchronized
和volatile
关键字进行线程化。使用监视器和volatile字段是相对低级的线程构造 - 更高级别的构造,例如通用锁,障碍,ThreadPools,并发集合可以在java.util.concurrent
包中找到,以及低级别的原子操作。
Java中的线程不仅仅是该语言中的几个关键字。 Java Memory Model强制要求多线程内存访问的结果,例如当一个线程的更改对其他线程可见时。这确保正确编写的线程程序按预期运行,而不管底层架构(指令重新排序,缓存一致性策略等)。
原始的java类库提供了代表线程的java.lang.Thread
的线程支持,以及表示线程局部变量的JDk 1.2 java.lang.ThreadLocal
。原始JDK还包括可执行对象的抽象概念 - java.lang.Runnable
。并发工具使用Callable
和Future
对此进行了扩展,这使得创建异步结果比仅使用低级结构进行编码要简单得多。
虽然你可以使用volatile
,synchronized
和Runnable
(与JDK 1.5之前一样多),但并发工具提供的类使编写线程程序变得更加容易他们纠正的可能性更大。
答案 1 :(得分:0)
有java.lang.Thread和java.util.concurrent,它包含一些糖,如信号量,执行器,blockingQueues等。
似乎(我不确定)util.concurrent中的所有类都基于java.lang.Thread,因此java.lang.Thread与java中的低级相同。这意味着java.util.concurrent与Thread相比是高级的。
答案 2 :(得分:0)
这意味着它对线程有一个程序员友好的抽象(参见java.lang.Thread
)。它支持使用synchronized
关键字进行简单而强大的同步。它还为java.util.concurrent
中的线程池,并发,锁定等提供了很好的实用工具。
答案 3 :(得分:0)
这意味着线程是Java语言规范的一部分,而不是C语言中的线程库。
答案 4 :(得分:0)
AFAIK synchronized
和volatile
是Java中唯一的并发语言功能。其他所有东西都只是一个常见同步机制(信号量,锁,互斥体等)的包装器库。
答案 5 :(得分:0)
Java Language Specification中有一个相当长的篇章 - 一个强有力的指标,通过语言本身支持线程。最明显的Java语言元素是关键字 synchronized 和 volatile 。另一个支持元素是Thread
类的特殊效果:
线程由Thread类表示。用户创建线程的唯一方法是创建此类的对象;每个线程都与这样的对象相关联。当在相应的Thread对象上调用start()方法时,线程将启动。