跳过正文

JAVA多线程

·44 字·1 分钟
jiladahe1997
作者
jiladahe1997
To see the world as it is, and to love it

JAVA多线程
#

创建线程

java有原生的线程,但是一般来说都是使用的是线程池来操作,比较方便。

ExecutorService executorService = Executors.newFixedThreadPool(16);

之后直接往线程池加需要执行的任务就行了

executorService.execute\(\(\)\-\>{

                ByteArrayInputStream partStream = new ByteArrayInputStream\(onceReadyBytes\);

                UploadPartRequest uploadPartRequest = new UploadPartRequest\(\).withBucketName\("embeddedproxy\-1252616609"\).

                    .withKey\("mirrorFile/MDK529.EXE"\).withUploadId\(uploadId\).withPartNumber\(finalPartNumber\)

                        .withInputStream\(partStream\).withPartSize\(finalReadByte\);

                UploadPartResult uploadPartResult = cosClient.uploadPart\(uploadPartRequest\);

                System.out.println\("上传完成, etag:"\+uploadPartResult.getETag\(\)\);

                partETags.add\(new PartETag\(finalPartNumber, uploadPartResult.getETag\(\)\)\);

            }\);

等待线程结束

主要有三种方法:1.是操作系统原理提高的信号量,每个线程完了就把信号量减1, java叫 CountDownLatch

2.是调用线程池的shutdown方法。

3.是用 invokeAll方法

4.是用 ExecutorCompletionServicce

参考

https://www.baeldung.com/java-executor-wait-for-threads

https://stackoverflow.com/questions/1250643/how-to-wait-for-all-threads-to-finish-using-executorservice