多线程的实现原理(二)

1.JVM内存模型

2.JVM如何解决原子性、可见性、有序性的问题

3.volatie 和 synchronized

 


synchronized 的实现原理和应用

synchronized有三种方式来加锁:1.修饰实例方法,两个线程同时访问同一个实例对象中的方法 synchronized(this) 时候会发生有一个会被阻塞。 

public class Demo extends Thread {

    @Override
    public void run() {
        synchronized(this) {
            System.out.println(this.hashCode() + " : " + LocalDateTime.now());
            try {
                //休眠10秒
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        Demo demo = new Demo();
        //创建两个线程实例
        Thread t1 = new Thread(demo, "线程A");
        Thread t2 = new Thread(demo, "线程B");
        t1.start();
        t2.start();
    }

}

输出结果:

              A : 2019-05-15T11:40:40.882

              B : 2019-05-15T11:40:50.887

可以发现B线程执行时间比A线程晚了10秒。

修改main方法 :

public static void main(String[] args) {
        //创建两个实例
        Demo demo = new Demo();
        Demo demo2 = new Demo();
        //创建两个线程实例
        Thread t1 = new Thread(demo, "线程A");
        Thread t2 = new Thread(demo2, "线程B");
        t1.start();
        t2.start();
    }

输出结果:             

              A : 2019-05-15T11:40:40.882

              B : 2019-05-15T11:40:40.887

可以发现并没有出现锁同步的情况,两个线程是并发进行的

2.修饰代码块,指定加锁对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中多线程实现的原理主要是通过线程对象的创建和启动来实现的。Java中实现多线程的方式有四种:继承Thread类、实现Runnable接口、实现Callable接口、使用线程池。下面分别介绍这四种方式的实现原理: 1. 继承Thread类 继承Thread类是实现多线程的一种方式,它的实现原理是创建一个继承自Thread类的子类,并重写run()方法,在run()方法中编写线程执行的代码。然后创建该子类的对象,并调用start()方法启动线程。 2. 实现Runnable接口 实现Runnable接口是实现多线程的另一种方式,它的实现原理是创建一个实现了Runnable接口的类,并实现run()方法,在run()方法中编写线程执行的代码。然后创建该类的对象,并将其作为参数传递给Thread类的构造方法中,最后调用start()方法启动线程。 3. 实现Callable接口 实现Callable接口是实现多线程的一种方式,它的实现原理是创建一个实现了Callable接口的类,并实现call()方法,在call()方法中编写线程执行的代码。然后创建该类的对象,并将其作为参数传递给FutureTask类的构造方法中,最后调用start()方法启动线程。 4. 使用线程池 使用线程池是实现多线程的一种方式,它的实现原理是创建一个线程池对象,并将任务提交给线程池执行。线程池会自动管理线程的创建和销毁,从而避免了频繁创建和销毁线程的开销。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值