一、String、StringBuffer、StringBuilder
1.String:
***string类是java中用于表示不可变字符序列的类。
***string对象是不可变的,一旦创建,其值就不能被改变。每次对string对象的修改操作都会生成一个新的string对象。
***由于string的不可变性,在频仍修改字符串情况,可能会产生大量的暂时对象,导致性能下降。
***string对象是线程安全的,因为它们的值不会被修改。
2.Stringbuffer:
***stringbuffer表示可变的字符序列,可以对字符串内容进行增删。
***stringbuffer对象是可变的,即其内容可以被修改,而不像string那样生成新的对象。
***stringbuffer在处置处罚大量字符串修改时具有更高的性能,因为它避免了频仍的对象创建和垃圾回收。
***stringbuffer是线程安全的,它的方法都是同步的,可以在多线程情况下安全地使用。
3.Stringbuilder:
***stringbuilder也表示可变字符序列,与stringbuffer类似,但它不是线程安全地
***与stringbuffer雷同,stringbuilder对象的内容是可变的
***stringbuilder的性能通常优于stringbuffer,因为它不需要同步,所以在单线程情况中使用stringbuilder通常会有更好的性能。
***stringbuilder通常用于单线程情况中需要高效修改字符串的场景
二、BIO、NIO、AIO
BIO:壅闭IO,当应用步伐通过socket等API发送或吸收数据时,线程会被壅闭,直到数据被读取或者写入完毕。
***优点:简朴易用;可靠性好(数据在读取写入时能明确地告知操作乐成或失败);
***缺点:效率低(每个IO操作都会导致线程的壅闭,BIO模子的效率很低;当并发量很大时,线程的创建和烧毁会占用系统资源,性能下降);不适合处置处罚大量连接(BIO模子遇到大量连接时会导致服务器壅闭,无法快速响应请求);
NIO:非壅闭IO,当数据准备完毕时,线程才会去读取或者写入数据。
***优点:高效(IO操作时不会壅闭线程,可以快速处置处罚请求);可以大量连接(NIO使用单线程来处置处罚多个请求,可以通过变乱驱动方式,很容易地处置处罚大量连接);更灵活(NIO提供选择器和通道等操作,可以根据需要正确地控制读写操作);
***缺点:编码复杂(NIO编程难度高,需要处置处罚不同地操作系统底层细节和协议);可靠性低(NIO使用了非壅闭IO方式,不太容易知道IO操作的乐成与失败);
AIO:异步IO,与IO操作相关的线程会在完成操作后通知相应的应用步伐。
***优点:异步性(AIO模子允许应用步伐在等待IO操作完成期间执行其他使命,进步了应用步伐的响应能力和吞吐量);高效率(由于使用了异步处置处罚,AIO能更好地使用系统资源,镌汰了不必要的线程切换和壅闭);
***缺点:实现复杂;
对于处置处罚大量并发连接的应用步伐,NIO和AIO模子通常更为合适;而对于简朴的IO操作或者小型应用步伐,BIO更为简朴和直接。
三、ConcurrentHashMap、HashMap
1.ConcurrentHashMap:
- 扩容机制:当某个桶中的元素个数超过阈值时,会触发扩容操作,且扩容过程高效。
- 数据布局:ConcurrentHashMap接纳数组、链表和红黑树来实现哈希表,以进步查询效率。
- 线程安全性:通太过段锁和CAS操作来保证线程安全,进步并发性能。
***整个哈希表被分为若干个段(Segment),每个段都是一个独立的哈希表,拥有自己的锁。不同的线程可以并发地访问不同的段,从而进步了并发性能。
***ConcurrentHashMap使用了CAS(Compare-And-Swap)操作来更新数据,从而镌汰了锁的争用,进步了并发度。
2.HashMap:
HashMap 的实现原理基于哈希表,通过哈希函数将键映射到桶的索引上,并使用链表或红黑树来处置处罚哈希辩说。随着键值对的增加,HashMap 会进行扩容操作以进步性能。 HashMap 不是线程安全。
四、创建线程的几种方式
1.继续Thread类并重写run方法
2.实现runnable接口并重写run方法
3.实现callable接口并重写run方法
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |