多线程初探(四)

来源:互联网 发布:云服务器 8000 端口 编辑:程序博客网 时间:2024/06/05 10:00
package com.liujunhua.it02;/** * 如何查找多线程的安全问题: * 1.明确哪些代码是多线程运行代码 * 2.明确哪些是共享数据 * 3.明确多线程运行代码中哪些语句是操作共享数据的。 */public class Demo01 {public static void main(String[] args) {Cus cus = new Cus();Thread t1 = new Thread(cus);Thread t2 = new Thread(cus);Thread t3 = new Thread(cus);t1.start();t2.start();t3.start();}}class Bank {private int sum = 0;private Object obj = new Object();public void add(int n) {        /*         * 这里用到了同步代码块,只允许单个线程执行该代码块代码         * 同步代码块的作用:同步代码块里的代码不允许多个线程同时操作,只允许当前正在对代码块的线程操作         * 我的思考:         * 同步代码块不一定用在继承Thread或实现runnable接口的类中,也可以用在操作共享数据的类中         */synchronized (obj) {sum = sum + n;System.out.println("sum=" + sum);}}}class Cus implements Runnable {private Bank1 b = new Bank1();@Overridepublic void run() {for (int i = 0; i < 3; i++) {b.add(100);}}}

0 0