• [javaSE] 看博客学习java并发编程


    共享性

    多线程操作同一个数据,产生线程安全问题

    新建一个类ShareData

    设计一个int 型的成员变量count

    设计一个成员方法addCount(),把count变量++

    在main函数中开启多个线程操作这个成员变量,在main函数里

    获取ShareData对象,new 出来

    使用for循环10次,在循环中开启线程,模拟10个线程并发,在循环内

    获取Thread对象,new出来,构造函数参数:Runable对象

    匿名内部类实现Runable接口,重写run()方法

    调用Thread.sleep(1000),使线程睡眠一秒,增加出现问题的概率

    使用for循环100次,调用addCount()方法

    调用Thread.sleep(3),主程序睡眠3秒,保证上面的线程全部执行完了

    打印count变量

    调用Thread对象的start()方法

    package com.tsh.mthread;
    
    public class Home {
        public int count;
    
        public static void main(String[] args) {
            final Home home = new Home();
    
            for (int i = 0; i < 10; i++) {
                Thread t = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        for (int j = 0; j < 100; j++) {
                            home.addCount();
                        }
    
                        try {
                            Thread.sleep(1000);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        System.out.println(Thread.currentThread()+":"+home.count);
                    }
                });
                t.start();
            }
            // 睡三秒等等上面的
            try {
                Thread.sleep(3000);
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println("总计:" + home.count);
        }
    
        public void addCount() {
                count++;
        }
    }

    互斥性

    使用synchronized关键字修饰上面的addCount()方法,当前线程操作时加把锁,同时只允许一个访问者对资源进行访问,具有唯一性和排他性

        public synchronized void addCount() {
                count++;
        }

    使用synchronized修饰代码块

        public void addCount() {
            synchronized (this) {
                count++;
            }
        }
  • 相关阅读:
    面板数据及其基本模型
    markdwon编辑公式入门
    向纳什大神致敬
    我和我的祖国观后感
    少年的你观后感
    特征选择学习笔记1(综述)
    时间序列学习笔记1
    《绿皮书》观后感
    《美丽心灵》观后感
    pycharm跨目录调用文件
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5431636.html
Copyright © 2020-2023  润新知