专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 Java中实现线程同步的方法

Java中实现线程同步的方法

更新时间:2022-06-10 09:24:00 来源:动力节点 浏览929次

Java中实现线程同步的方法有哪些?动力节点小编来告诉大家。

1.同步方式

也就是有修改同步关键字的方法。因为java中的每个对象都有一个内置锁,当你用这个关键字修改一个方法时,内置锁保护了整个方法。在调用方法之前,需要先获取内置锁,否则会处于阻塞状态。。

注意:Java多线程同步synchronized关键字也可以修改静态方法,如果调用静态方法,会锁定整个类。

2.同步代码块

也就是被synchronized关键字修改的语句块。被这个关键字修改的语句块被自动锁定,实现同步。

代码如下:

synchronized(object){ 
}

注意:同步是一项开销很大的操作,所以要尽量减少同步的内容。。一般不需要同步整个方法,使用同步的代码块可以同步关键代码。

package com.xhj.thread;
    /**
     *  application of thread synchronization 
     * 
     * @author XIEHEJUN
     * 
     */
    public class SynchronizedThread {
        class Bank {
            private int account = 100;
            public int getAccount() {
                return account;
            }
            /**
             *  realized by synchronous method 
             * 
             * @param money
             */
            public synchronized void save(int money) {
                account += money;
            }
            /**
             *  implement with synchronous code block 
             * 
             * @param money
             */
            public void save1(int money) {
                synchronized (this) {
                    account += money;
                }
            }
        }
class NewThread implements Runnable {
            private Bank bank;
            public NewThread(Bank bank) {
                this.bank = bank;
            }
            @Override
            public void run() {
                for (int i = 0; i < 10; i++) {
                    // bank.save1(10);
                    bank.save(10);
                    System.out.println(i + " the account balance is :" + bank.getAccount());
                }
            }
        }
        /**
         *  set up a thread and call the inner class 
         */
        public void useThread() {
            Bank bank = new Bank();
            NewThread new_thread = new NewThread(bank);
            System.out.println(" thread 1 ");
            Thread thread1 = new Thread(new_thread);
            thread1.start();
            System.out.println(" thread 2 ");
            Thread thread2 = new Thread(new_thread);
            thread2.start();
        }
        public static void main(String[] args) {
            SynchronizedThread st = new SynchronizedThread();
            st.useThread();
        }
    }

例子加说明:

同步是多线程中的一个重要概念。在多线程环境中可以保证使用同步。,程序不会在设计之外产生错误结果。实现同步有两种方式。, 同步方法和同步块,都使用了synchronized关键字。

同步方法:在方法中添加同步修饰符,使其成为同步方法,该方法可以是静态的和非静态的,但不能是抽象类的抽象方法,也不能是接口中的接口方法。

3.锁同步

(1)java.util.concurrent

(2)synchronized同步的

(3)ReentrantLockfinally

线程本地

ThreadLocal() : get() : initialValue() : "" set(T value) : value

        //Bank
        public class Bank{
            //ThreadLocalaccount
            private static ThreadLocal<Integer> account = new ThreadLocal<Integer>(){
                @Override
                protected Integer initialValue(){
                    return 100;
                }
            };
            public void save(int money){
                account.set(account.get()+money);
            }
            public int getAccount(){
                return account.get();
            }
        }

 

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>