java中有哪些类库

java中有哪些类库,第1张

java类库:

1. java.lang包:

java最常用的包,程序不需要注入,就可以使用该包中的类,利用包中的类可以设计最基本的Java程序;

2.java.awt包 :

提供了图形界面的创建方法,包括按钮、文本框、列表框、容器、字体、颜色和图形等元素的建立和设置;

3.javax.swing包:

Java编写的图形界面提供创建类,利用javax.swing包的类建立的界面元素可调整为各种 *** 作系统的界面风格,支持各种 *** 作平台的界面的开发,swing包还提供了树形控件、表格控件的类等;

4.java.io包:

提供数据流方式的系统输入输出控制、文件和对象的读写串行化处理;

5..java.util包:

提供时间日期、随机数以及列表、 *** 、哈希表和堆栈等创建复杂数据结构的类;

6.java包:

提供网络开发的支持;

7.java.apple包:

包含Applet类,提供多媒体、网络功能。

AtomicInteger

可以用原子方式更新int值。类AtomicBoolean、AtomicInteger、AtomicLong和AtomicReference的实例各自提供对相应类型单个变量的访问和更新。java课程培训机构认为基本的原理都是使用CAS *** 作:

booleancompareAndSet(expectedValue,updateValue)

如果此方法(在不同的类间参数类型也不同)当前保持expectedValue,则以原子方式将变量设置为updateValue,并在成功时报告true。

循环CAS,参考AtomicInteger中的实现:

publicfinalintgetAndIncrement(){    for(){      intcurrent=get()      intnext=current+1      if(compareAndSet(current,next))        returncurrent

}

}  publicfinalbooleancompareAndSet(intexpect,intupdate){    returnunsafe.compareAndSwapInt(this,valueOffset,expect,update)

}

ABA问题

因为CAS需要在 *** 作值的时候检查下值有没有发生变化,如果没有发生变化则更新,但是如果一个值原来是A,变成了B,又变成了A,那么使用CAS进行检查时会发现它的值没有发生变化,但是实际上却变化了。ABA问题的解决思路就是使用版本号。在变量前面追加上版本号,每次变量更新的时候把版本号加一,那么A-B-A就会变成1A-2B-3A。

从Java1.5开始JDK的atomic包里提供了一个类AtomicStampedReference来解决ABA问题。这个类的compareAndSet方法作用是首先检查当前引用是否等于预期引用,并且当前标志是否等于预期标志,如果全部相等,则以原子方式将该引用和该标志的值设置为给定的更新值。

ArrayBlockingQueue

一个由数组支持的有界阻塞队列。此队列按FIFO(先进先出)原则对元素进行排序。队列的头部是在队列中存在时间最长的元素。队列的尾部是在队列中存在时间最短的元素。新元素插入到队列的尾部,队列获取 *** 作则是从队列头部开始获得元素。这是一个典型的“有界缓存区”,固定大小的数组在其中保持生产者插入的元素和使用者提取的元素。一旦创建了这样的缓存区,就不能再增加其容量。试图向已满队列中放入元素会导致 *** 作受阻塞;试图从空队列中提取元素将导致类似阻塞。

此类支持对等待的生产者线程和使用者线程进行排序的可选公平策略。默认情况下,不保证是这种排序。然而,通过将公平性(fairness)设置为true而构造的队列允许按照FIFO顺序访问线程。公平性通常会降低吞吐量,但也减少了可变性和避免了“不平衡性”。

LinkedBlockingQueue

一个基于已链接节点的、范围任意的blockingqueue。此队列按FIFO(先进先出)排序元素。队列的头部是在队列中时间最长的元素。队列的尾部是在队列中时间最短的元素。新元素插入到队列的尾部,并且队列获取 *** 作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。

可选的容量范围构造方法参数作为防止队列过度扩展的一种方法。如果未指定容量,则它等于Integer.MAX_VALUE。除非插入节点会使队列超出容量,否则每次插入后会动态地创建链接节点。

如果构造一个LinkedBlockingQueue对象,而没有指定其容量大小,LinkedBlockingQueue会默认一个类似无限大小的容量(Integer.MAX_VALUE),这样的话,如果生产者的速度一旦大于消费者的速度,也许还没有等到队列满阻塞产生,系统内存就有可能已被消耗殆尽了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12061624.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存