中文JAVA技術平等自由協作創造

          Java專題文章博客和開源

          常用鏈接

          統計

          最新評論

          Java多線程中使用synchronized說明

            1.在類中方法上加上
            synchronized關鍵字,是對整個對象加鎖,當一個線程訪問帶有synchronized的方法時,其他帶有synchronized的方法的訪問就都會阻塞。
            樣例:
            public class ThreadTest {
            public static void main(String[] args) {
            Stu stu = new Stu();
            StuThread1 t1 = new StuThread1(stu);
            t1.start();
            StuThread2 t2 = new StuThread2(stu);
            t2.start();
            }
            }
            class StuThread1 extends Thread {
            Stu stu;
            public StuThread1(Stu stu) {
            this.stu = stu;
            }
            public void run() {
            stu.read1();
            }
            }
            class StuThread2 extends Thread {
            Stu stu;
            public StuThread2(Stu stu) {
            this.stu = stu;
            }
            public void run() {
            stu.read2();
            }
            }
            class Stu {
            public synchronized void read1() {
            System.out.println("read1 begin");
            try {
            Thread.currentThread()。sleep(2000);
            } catch (InterruptedException e) {
            e.printStackTrace();
            }
            System.out.println("read1 end");
            }
            public synchronized void read2() {
            System.out.println("read2 begin");
            try {
            Thread.currentThread()。sleep(2000);
            } catch (InterruptedException e) {
            e.printStackTrace();
            }
            System.out.println("read2 end");
            }
            }
            打印結果為(兩個線程是順序執行的):
            read1 begin
            read1 end
            read2 begin
            read2 end
            如果去掉read2前面的synchronized關鍵字,打印為(線程出現了交叉執行):
            read1 begin
            read2 begin
            read2 end
            read1 end
            修改read2方法,
            public void read2() {
            synchronized(this)
            {
            System.out.println("read2 begin");
            try {
            Thread.currentThread()。sleep(2000);
            } catch (InterruptedException e) {
            e.printStackTrace();
            }
            System.out.println("read2 end");
            }
            }
            對this進行加鎖,結果同一次,線程是順序執行的托福答案

          posted on 2014-05-15 11:35 好不容易 閱讀(181) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          PK10開獎 PK10開獎
          主站蜘蛛池模板: 松江区| 富宁县| 贞丰县| 山西省| 台湾省| 新邵县| 墨竹工卡县| 霍州市| 潢川县| 柘城县| 郴州市| 卫辉市| 封开县| 余干县| 大石桥市| 泰州市| 游戏| 安塞县| 成都市| 德保县| 湖南省| 天门市| 德安县| 博客| 峨眉山市| 长乐市| 清原| 新余市| 八宿县| 黄大仙区| 青岛市| 岐山县| 吉林市| 义马市| 德钦县| 鄂伦春自治旗| 荥经县| 西青区| 黄骅市| 巴林右旗| 延川县|