zoukankan      html  css  js  c++  java
  • [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++;
            }
        }
  • 相关阅读:
    如何判断单链表是否存在环
    语法面试等题目汇总
    数据分析师常见的10道面试题解答
    Python 的函数
    Python 的错误和异常处理
    Python 的条件语句和循环语句
    Python 的基本运算和内置函数
    Python 的数据表示
    Python 基础
    关于 Python
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5431636.html
Copyright © 2011-2022 走看看