java 多线程 Thread 互斥锁

文章讨论了Java中MyList类的同步方法(synchronized)与同步代码块的使用,比较了它们在多线程环境下对性能的影响,指出同步代码块效率更高但写法更繁琐。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.data.entity;

import java.util.ArrayList;
import java.util.List;

public class MyList {
    public List<Integer> list=new ArrayList<>();

    //同步方法 线程锁
    //public synchronized void  insert(int i){
    public void  insert(int i){
        list.add(i);
    }

    public void query(){
        System.out.println("长度:"+list.size());
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }

}
import com.data.entity.MyList;

public class text8 {
    public static void main(String[] args)throws Exception {
        MyList m=new MyList();
        Thread t1=new Thread(()->{
            synchronized (m) {   //同步代码块 线程琐
                for (int i = 1; i <= 5; i++) {
                    m.insert(i);
                }
            }
        });
        Thread t2=new Thread(()->{
            synchronized (m) {   //同步代码块 线程琐
                for (int i = 6; i <= 10; i++) {
                    m.insert(i);
                }
            }
        });

        t1.start();
        t2.start();

        t1.join();
        t2.join();

        m.query();
    }
}
区别
  1. 同步方法: 线程执行需要同时争抢时间片和锁标记,写法简单但效率较慢

  2. 同步代码块: 线程只需要争抢时间片, 开启互斥锁的线程默认拥有锁标记, 效率较快但写法相对繁琐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值