Loading

Java并发学习:线程不安全类和安全类基础

一.何为线程不安全类?
一般认为,当多个线程并发的对一个类对象进行操作后发生了线程安全问题,那么这个类就是线程不安全的类。
那么就有人认为:那为什么要编写线程不安全的类呢?把所有类都编写成线程安全的类不就行了,这是不现实的,我们知道,实现线程安全就要付出一定的性能开销,在有些情况下使用线程不安全的类性能要比使用线程安全的类的性能要好很多。

总结:线程不安全的类的性能一般要比线程安全的类高。

二.Java中线程不安全的类与其对应的安全类
我们在进行java编程时,有必要区分java库中一些线程安全和不安全的类来提高我们的效率

1.StringBuilder和StringBuffer
java中关于字符串的类有三个,String,String**Builder,StringBuffer,其中String我们知道是不可变类,它一定线程安全,那么剩下的StringBuild和StringBuffer是不是线程安全的呢?

我们可以做个小实验:

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class SafeClass {
   

    public static int clientTotal=5000;
    public static int threadTotal=200;

    public static StringBuilder stringBuilder=new StringBuilder();
    public static void main(String[] args) throws InterruptedException {
   
        ExecutorService executorService= Executors.newCachedThreadPool();//线程池
        final Semaphore semaphore=new Semaphore(threadTotal);//信号量
        final CountDownLatch countDownLatch=new CountDownLatch(clientTotal);//阻塞倒计数
        for(int i=0;i<clientTotal;i++){
   

            executorService.execute(()->{
   
                try{
   
                    semaphore.acquire();
                   Mothen();
                    semaphore.release();
                }catch(Exception e){
   
posted @ 2020-10-19 10:46  文牧之  阅读(44)  评论(0)    收藏  举报  来源