java家居 finished_java 多線程踩過的坑

多線程踩坑記錄:

1、多線程切記不可以同時操作同一個原子數據。解釋:存在一個條數據庫A數據,不可以在2個或2個以上的線程中同時操作A數據。會引發重復操作。

2、多線程操作方法不要加synchronized同步關鍵字,這失去了多線程的意義。解釋:會是多線程按照同步線程執行。

3、調用第三方接口時盡量不要使用多線程。解釋:因為你不知道第三方接口是否針對高並發作了處理。如果第三方接口沒有針對高並發作處理,自己寫的多線程邏輯也沒有處理好,會導致重復操作成功。后果很難處理。

總結:

作為一只菜鳥遇到過的問題。給自己提醒下。

處理一批數據的多線程方法:

使用同步線程獲取批量數據,在邏輯上將這批數據分成不同部分,每一部分使用多線程處理。這樣可以避免多個線程同時操作統一個數據。

多線程的實例synchronized對比:

線程執行方法:

importthreads.TaskRunnable;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;public classThreadsMain {public static voidmain(String[] args) {//創建線程池對象 參數5,代表有5個線程的線程池

ExecutorService service = Executors.newFixedThreadPool(5);//創建Runnable線程任務對象

TaskRunnable task = newTaskRunnable();//從線程池中獲取線程對象

service.submit(task);

System.out.println("----------------------");//再獲取一個線程對象

service.submit(task);//關閉線程池

service.shutdown();

}

}

帶有synchronized的執行方法:

public class TaskRunnable implementsRunnable{

@Overridepublic synchronized voidrun() {for (int i = 0; i < 10; i++) {try{

Thread.sleep(1000);

}catch(InterruptedException e) {

e.printStackTrace();

}

System.out.println("自定義線程任務在執行"+i);

}

}

}

執行結果:

----------------------

自定義線程任務在執行0

自定義線程任務在執行1

自定義線程任務在執行2

自定義線程任務在執行3

自定義線程任務在執行4

自定義線程任務在執行5

自定義線程任務在執行6

自定義線程任務在執行7

自定義線程任務在執行8

自定義線程任務在執行9

自定義線程任務在執行0

自定義線程任務在執行1

自定義線程任務在執行2

自定義線程任務在執行3

自定義線程任務在執行4

自定義線程任務在執行5

自定義線程任務在執行6

自定義線程任務在執行7

自定義線程任務在執行8

自定義線程任務在執行9

Process finished with exit code 0

沒有synchronized的執行方法:

public class TaskRunnable implementsRunnable{

@Overridepublic voidrun() {for (int i = 0; i < 10; i++) {try{

Thread.sleep(1000);

}catch(InterruptedException e) {

e.printStackTrace();

}

System.out.println("自定義線程任務在執行"+i);

}

}

}

執行結果:

----------------------

自定義線程任務在執行0

自定義線程任務在執行0

自定義線程任務在執行1

自定義線程任務在執行1

自定義線程任務在執行2

自定義線程任務在執行2

自定義線程任務在執行3

自定義線程任務在執行3

自定義線程任務在執行4

自定義線程任務在執行4

自定義線程任務在執行5

自定義線程任務在執行5

自定義線程任務在執行6

自定義線程任務在執行6

自定義線程任務在執行7

自定義線程任務在執行7

自定義線程任務在執行8

自定義線程任務在執行8

自定義線程任務在執行9

自定義線程任務在執行9

Process finished with exit code 0

對比結論:

加入synchronized執行結果會跟同步方法相似。就失去了多線程的意義

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值