160407、java实现多线程同步
生活随笔
收集整理的這篇文章主要介紹了
160407、java实现多线程同步
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
多線程就不說了,很好理解,同步就要說一下了。同步,指兩個或兩個以上隨時間變化的量在變化過程中保持一定的相對關系。所以同步的關鍵是多個線程對象競爭同一個共享資源。 同步分為外同步和內同步。外同步就是在外部創建共享資源,然后傳遞到線程中。代碼如下: class?MyThread?implements?java.lang.Runnable?{?? ????private?int?threadId;?? ????private?Object?obj;?? ?? ????public?MyThread(int?id,?Object?obj)?{?? ????????this.threadId?=?id;?? ????????this.obj?=?obj;?? ????}?? ?? ????@Override?? ????public?void?run()?{?? ????????synchronized?(obj)?{//實現obj同步?? ????????????for?(int?i?=?0;?i?<?100;?++i)?{?? ????????????????System.out.println("Thread?ID:?"?+?this.threadId?+?"?:?"?+?i);?? ????????????}?? ????????}?? ????}?? }?? ?? public?class?TestThread?{?? ?? ????public?static?void?main(String[]?args)?throws?InterruptedException?{?? ????????Object?obj?=?new?Object();?? ????????for?(int?i?=?0;?i?<?10;?++i)?{?? ????????????new?Thread(new?MyThread(i,?obj)).start();//obj為外部共享資源?? ????????}?? ????}?? }??
? ? 內同步,就是在線程內部創建對象,然后實現同步。因為類成員變量可以被類的所有實例共享,所有可以利用這一特性實現: 代碼如下:class?MyThread?implements?java.lang.Runnable?{?? ????private?int?threadId;?? ????private?static?Object?obj?=?new?Object();?? ?? ????public?MyThread(int?id)?{?? ????????this.threadId?=?id;?? ????}?? ?? ????@Override?? ????public?void?run()?{?? ????????synchronized?(obj)?{?? ????????????for?(int?i?=?0;?i?<?100;?++i)?{?? ????????????????System.out.println("Thread?ID:?"?+?this.threadId?+?"?:?"?+?i);?? ????????????}?? ????????}?? ????}?? }?? ?? public?class?TestThread?{?? ?? ????public?static?void?main(String[]?args)?throws?InterruptedException?{?? ????????for?(int?i?=?0;?i?<?10;?++i)?{?? ????????????new?Thread(new?MyThread(i)).start();?? ????????}?? ????}?? } ?
? ? 內同步,就是在線程內部創建對象,然后實現同步。因為類成員變量可以被類的所有實例共享,所有可以利用這一特性實現: 代碼如下:
轉載于:https://www.cnblogs.com/zrbfree/p/5364828.html
總結
以上是生活随笔為你收集整理的160407、java实现多线程同步的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用DFS求任意两点的所有路径
- 下一篇: ORB-SLAM(四)追踪