• Java线程同步


    package a.thread;
    
    public class A {
        private static int x = 0;
    
        public void run() {
            // 同步代码块
            synchronized (this) {
                for (int i = 0; i < 10; i++) {
                    System.out.println(Thread.currentThread().getName()
                            + "=====;x=" + x);
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    x++;
                }
            }
        }
    
        // 同步方法
        public synchronized void aa() {
            for (int i = 0; i < 10; i++) {
                System.out
                        .println(Thread.currentThread().getName() + "====;x=" + x);
                x++;
            }
        }
    }
    View Code
    package a.thread;
    
    public class MainB {
        public static void main(String[] args) {
            final A a1 = new A();
            Thread[] threads = new Thread[5];
            for (int i = 0; i < 5; i++) {
                threads[i] = new Thread(new Runnable() {
    
                    public void run() {
                        a1.aa();
                        a1.run();
                    }
                });
                threads[i].setName("线程" + i);
                threads[i].start();
                try {
                    threads[i].sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            for (int i = 0; i < 5; i++) {
                try {
                    threads[i].join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    View Code

     同步方法---使用synchronized修饰的方法:

    访问修饰符  synchronized [static] 数据返回类型 方法名() {

    ...........

    }

    防止多个线程同时访问这个类中的synchronized static 方法。static可以省略,它可以对类的所有对象实例起作用。

    同步语句块---只对这个区块的资源实行互斥访问:

    synchronized(共享对象名){

      被同步的代码段

    }

    1)它锁定的是共享对象名对应的当前对象。

    2)线程中实现同步块一般是在run方法中添加。

  • 相关阅读:
    网络流模型之二分图匹配问题
    省选测试8
    省选测试9
    省选测试7
    省选测试6
    网络流最大流、最小割学习笔记
    kruskal重构树学习笔记
    省选测试5
    Python 打包成exe 方式
    JQuery
  • 原文地址:https://www.cnblogs.com/LYL-1314/p/5728332.html
Copyright © 2020-2023  润新知