首页 > 编程语言 > 详细

Java Concurrency/Threads(4) —— synchronized

时间:2019-09-05 20:12:25      阅读:80      评论:0      收藏:0      [点我收藏+]
package com.guoqiang;

import java.util.zip.CheckedOutputStream;

import static com.guoqiang.ThreadColor.*;

public class Main {

    public static void main(String[] args) {
        CountDown cd = new CountDown();

        Thread t1 = new ThreadCountDown(cd);
        t1.setName("Thread 1");
        Thread t2 = new ThreadCountDown(cd);
        t2.setName("Thread 2");

        t1.start();
        t2.start();
    }
}

class CountDown {
    public void countDown() {
        String color;
        switch (Thread.currentThread().getName()) {
            case "Thread 1" :
                color = ANSI_CYAN;
                break;
            case "Thread 2":
                color = ANSI_RED;
                break;
            default:
                color = ANSI_GREEN;
        }
        for (int i = 10; i >= 0; i--) {
            System.out.println(color + Thread.currentThread().getName() + ": i = " + i);
        }
    }
}

class ThreadCountDown extends Thread {
    private CountDown countDown;
    public ThreadCountDown(CountDown cd) {
        countDown = cd;
    }
    @Override
    public void run() {
        countDown.countDown();
    }
}

OUT:
技术分享图片

将Class:CountDown改为:

class CountDown {
    private int i; //将i变为全局变量
    public void countDown() {
        String color;
        switch (Thread.currentThread().getName()) {
            case "Thread 1" :
                color = ANSI_CYAN;
                break;
            case "Thread 2":
                color = ANSI_RED;
                break;
            default:
                color = ANSI_GREEN;
        }
        for (i = 10; i >= 0; i--) {
            System.out.println(color + Thread.currentThread().getName() + ": i = " + i);
        }
    }
}

OUT:
技术分享图片

原因:

  1. Heap是一个进程的所有threads共享的一段内存空间
  2. 每个threads有自己独立的无法被别人访问的thread stack空间
  3. local variables 局部变量存放在thread stack中,每个threads都有自己独立的local variable的副本(存放线程栈空间)
  4. object instance value 存放在heap上,每个在同一个对象上工作的threads,共享对象的全局变量。

synchronized 关键词

使用synchronized关键词修饰static object / static method
synchronized 一个 语句块
```java
synchronized(this) { // synchronized 的对象必须存在在heap上,多个线程对这个对象共享。
statement1;
statement2;
}

Java Concurrency/Threads(4) —— synchronized

原文:https://www.cnblogs.com/isguoqiang/p/11469162.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!