1. 程式人生 > >synchronized一半同步一半非同步(菜鳥玩執行緒)

synchronized一半同步一半非同步(菜鳥玩執行緒)

synchronized一半同步一半非同步

論證

不在synchronized塊中就是非同步執行,在synchronized塊中就是同步執行。

示例

自定義共享類

package com.chapter02.thread4;

public class Task {
    public void doLongTimeTask() {
        for (int i = 0; i < 100; i++) {
            System.out.println("NO SYNCHRONIZED THREAD NAME = " + Thread.currentThread().getName
() + " i = " + (i + 1)); } System.out.println("************************************************************************"); synchronized (this) { for (int i = 0; i < 100; i++) { System.out.println("SYNCHRONIZED THREAD NAME = " + Thread.currentThread(
).getName() + " i = " + (i + 1)); } } } }

自定義執行緒1

package com.chapter02.thread4;


public class MyThread1 extends Thread {
    private Task task;

    public MyThread1(Task task) {
        this.task = task;
    }

    @Override
    public void run() {
        super.run();
        task.
doLongTimeTask(); } }

自定義執行緒2

package com.chapter02.thread4;


public class MyThread2 extends Thread {
    private Task task;

    public MyThread2(Task task) {
        this.task = task;
    }

    @Override
    public void run() {
        super.run();
        task.doLongTimeTask();
    }
}

啟動類

package com.chapter02.thread4;
public class Run {
    public static void main(String[] args) {
        Task task = new Task();
        MyThread1 myThread1 = new MyThread1(task);
        myThread1.start();

        MyThread2 myThread2 = new MyThread2(task);
        myThread2.start();
    }
}

執行結果

NO SYNCHRONIZED THREAD NAME = Thread-0 i = 1
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 2
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 3
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 4
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 5
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 6
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 7
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 8
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 9
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 10
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 11
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 12
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 13
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 14
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 15
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 16
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 17
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 18
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 19
NO SYNCHRONIZED THREAD NAME = Thread-0 i = 20
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 1
************************************************************************************************
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 2
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 3
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 4
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 5
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 6
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 7
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 8
SYNCHRONIZED THREAD NAME = Thread-0 i = 1
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 9
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 10
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 11
SYNCHRONIZED THREAD NAME = Thread-0 i = 2
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 12
SYNCHRONIZED THREAD NAME = Thread-0 i = 3
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 13
SYNCHRONIZED THREAD NAME = Thread-0 i = 4
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 14
SYNCHRONIZED THREAD NAME = Thread-0 i = 5
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 15
SYNCHRONIZED THREAD NAME = Thread-0 i = 6
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 16
SYNCHRONIZED THREAD NAME = Thread-0 i = 7
SYNCHRONIZED THREAD NAME = Thread-0 i = 8
SYNCHRONIZED THREAD NAME = Thread-0 i = 9
SYNCHRONIZED THREAD NAME = Thread-0 i = 10
SYNCHRONIZED THREAD NAME = Thread-0 i = 11
SYNCHRONIZED THREAD NAME = Thread-0 i = 12
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 17
SYNCHRONIZED THREAD NAME = Thread-0 i = 13
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 18
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 19
NO SYNCHRONIZED THREAD NAME = Thread-1 i = 20
************************************************************************************************
SYNCHRONIZED THREAD NAME = Thread-0 i = 14
SYNCHRONIZED THREAD NAME = Thread-0 i = 15
SYNCHRONIZED THREAD NAME = Thread-0 i = 16
SYNCHRONIZED THREAD NAME = Thread-0 i = 17
SYNCHRONIZED THREAD NAME = Thread-0 i = 18
SYNCHRONIZED THREAD NAME = Thread-0 i = 19
SYNCHRONIZED THREAD NAME = Thread-0 i = 20
SYNCHRONIZED THREAD NAME = Thread-1 i = 1
SYNCHRONIZED THREAD NAME = Thread-1 i = 2
SYNCHRONIZED THREAD NAME = Thread-1 i = 3
SYNCHRONIZED THREAD NAME = Thread-1 i = 4
SYNCHRONIZED THREAD NAME = Thread-1 i = 5
SYNCHRONIZED THREAD NAME = Thread-1 i = 6
SYNCHRONIZED THREAD NAME = Thread-1 i = 7
SYNCHRONIZED THREAD NAME = Thread-1 i = 8
SYNCHRONIZED THREAD NAME = Thread-1 i = 9
SYNCHRONIZED THREAD NAME = Thread-1 i = 10
SYNCHRONIZED THREAD NAME = Thread-1 i = 11
SYNCHRONIZED THREAD NAME = Thread-1 i = 12
SYNCHRONIZED THREAD NAME = Thread-1 i = 13
SYNCHRONIZED THREAD NAME = Thread-1 i = 14
SYNCHRONIZED THREAD NAME = Thread-1 i = 15
SYNCHRONIZED THREAD NAME = Thread-1 i = 16
SYNCHRONIZED THREAD NAME = Thread-1 i = 17
SYNCHRONIZED THREAD NAME = Thread-1 i = 18
SYNCHRONIZED THREAD NAME = Thread-1 i = 19
SYNCHRONIZED THREAD NAME = Thread-1 i = 20

結論

如下所示,在進入synchronized程式碼塊後則排隊執行。

相關推薦

synchronized一半同步一半非同步執行

synchronized一半同步一半非同步 論證 不在synchronized塊中就是非同步執行,在synchronized塊中就是同步執行。 示例 自定義共享類 package com.chapter02.thread4; public class Task

synchronized驗證3個理論執行

synchronized驗證3個理論 1.論證1 1.1理論 當多個執行緒同時執行synchronized(非this)同步程式碼塊時呈同步效果。 1.2落地 1.2.1自定義鎖物件類 package com.chapter02.thread2_2_8_1; p

synchronized同步方法執行

synchronized同步方法 方法內的變數是執行緒安全的 實驗1: 共享變數類 package com.chapter02.thread1; public class HasSelfPrivate

synchronized資料型別String的常量池特性執行

synchronized資料型別String的常量池特性 在JVM虛擬機器中有String常量池快取的功能,將synchronized(String)同步塊與String聯合起來使用時,注意常量池帶來的

暫停執行執行

暫停執行緒 暫停執行緒,即執行緒還可以恢復執行。 Java多執行緒中,可以使用suspend()方法停止執行緒,使用resume()方法恢復執行緒的執行。 suspend與resume方法的使用 直接上

執行優先順序執行

執行緒的優先順序 在作業系統中,執行緒可以劃分為優先順序,優先順序較高的執行緒得到的CPU資源較多,也就是CPU優先執行優先順序較高的執行緒物件中的任務。 設定執行緒的優先順序使用setPriority

鎖物件的改變執行

鎖物件的改變 理論 在將任何資料型別作為同步鎖時,需注意的是,是否有多個執行緒同時持有鎖物件,如果同時持有相同的鎖物件,則這些執行緒之間就是同步的; 如果分別獲得鎖物件,這些執行緒之間就是非同步的。 示

髒讀執行

髒讀 髒讀一定會出現在操作例項變數的情況下,這就是不同執行緒”爭搶“例項變數的結果。 髒讀示例 定義共享變數例項類 package com.chapter02.dirtyRead; public cl

C語言經典例題教程100例

這兩天正在看基礎的演算法,在做的時候肯定不能避免的接觸了菜鳥上的經典100例,但是使用的時候發現並不是那麼的方便,因為它只是給了序號,如果查詢某一問題的話很不方便,所以做了這篇部落格,希望給自己和其他人帶來幫助!

Java多執行入門&執行安全

什麼是程序 電腦中時會有很多單獨執行的程式,每個程式有一個獨立的程序,而程序之間是相互獨立存在的。比如下圖中的QQ、酷狗播放器、電腦管家等等。 什麼是執行緒 程序想要執行任務就需要依賴執行緒。換句話說,就是程序中的最小執行單位就是執行緒,並且一個程序中至少有一個

關於執行同步的問題區域性變數實現執行同步

package com.bootdo.wang; /** * 5.使用區域性變數實現執行緒同步 * 如果使用ThreadLocal管理變數,則每一個使用該變數的執行緒都獲得該變數的副本, * 副本之間相互獨立,這樣每一個執行緒都可以隨意修改自己的變數副本,而不會對其他執行緒產生

關於執行同步的問題原子變數實現執行同步

package com.bootdo.wang; import java.util.concurrent.atomic.AtomicInteger; /** * 7.使用原子變數實現執行緒同步 * 在java的util.concurrent.atomic包中提供了建立了原子型別變數的工

群聊實現tcp和多執行

服務端程式碼 package com.cyj.tcp.chat2; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import ja

ucontext實現的使用者級多執行框架2搶先式多執行

#include "uthread.h"#include <assert.h>#include <stdlib.h>#include <time.h>ucontext_t Scheduler::ucontext;char Scheduler::stack[4096];u

執行至少三個執行分別列印A、B、C,要求按ABC的順序迴圈列印10次。

看到網上一道題,三個執行緒按順序列印A、B、C迴圈10次,於是自己按幾種方法也寫了一下: 一、用執行緒池、Lock鎖和condition(Object 監視器方法的使用)組合使用實現: package multithread; import java.util.concu

《Efficient Android Threading》Chapter 3---Threads on Android Android中的執行

Android中的執行緒 序:        閱讀英文原版,受益匪淺。修飾詞形容惟妙惟肖。        其中舉例之圖,經典,且秒不可言。亦當細細品味之。        翻譯為谷歌翻譯。 重點單詞日後補上,可用有道詞典積累,認識的單詞會越來越多  

Android連線伺服器,從伺服器獲取資料,以及從伺服器下載檔案單,多執行

首先需要在Eclipse中建立一個伺服器,在其中存入要下載的檔案,具體可參考之前的伺服器篇。 ScollView可以上下滑動 另外還有,android中的網路連線與之前java中可以通用,可以參照之前伺服器客戶端通訊篇。 新增的許可權

一半同步-一半非同步

package com.freeflying.thread.sync; /** * 一半同步,一半非同步 * @ClassName: SyncAndAsync * @Description: * @author freeflying * @date 2018年7

Ubuntu分區方案方案、常用方案和進階方案

變化 格式化 執行 菜鳥 格式 分開 清理 知識庫 重新 菜鳥方案 “/”與swap兩個分區就可以應付絕大多數的應用 常用方案 分為3個區 1. 掛載點/;主分區;安裝系統和軟件;大小為30G;分區格式為ext4; 2. 掛載點/home;邏輯分區;相當於“我的文檔”;大小

java語言登陸界面

pub oid box nts ring 實現 visible logs 更換 最近在看的Java入門書是《Head First》,一本很棒的Java書。 老師要求的程序流程圖我沒有,之前我們的做法是寫完代碼再畫流程圖,我想這樣的做法是不對的,流程圖應該是在寫代碼之前設計思