JUC-01线程基础知识

注意事项:

  1. 高内聚低耦合前提下,封装思想
  2. 判断、干活、通知
  3. 防止虚假唤醒,wait方法要注意使用while判断
  4. 注意标志位flag,可能是volatile的

使用JUC原因:

  1. 硬件方面
    1. 摩尔定律失效
  2. 软件方面
    1. 高并发系统,异步+回调生产需求


多线程相关概念:

进程

        是程序的⼀次执⾏,是系统进⾏资源分配和调度的独⽴单位,每⼀个进程都有它⾃⼰的内存空间和系统资源

线程

        一个进程包含一个或多个线程

        在同⼀个进程内⼜可以执⾏多个任务,⽽这每⼀个任务我们就可以看做是⼀个线程

 

管程

        Monitor(监视器),也就是我们平时所说的锁

        Monitor其实是一种同步机制,他的义务是保证(同一时间)只有一个线程可以访问被保护的数据和代码。
 
        JVM中同步是基于进入和退出监视器对象(Monitor,管程对象)来实现的,每个对象实例都会有一个Monitor对象,
         Object o = new Object();

          new Thread(() -> {
            synchronized (o)
            {

 

            }  },"t1").start();
 
        Monitor对象会和Java对象一同创建并销毁,它底层是由C++语言来实现的。

     Java线程分为用户线程和守护线程, 线程的daemon属性为true表示是守护线程,false表示是用户线程

        重点:

        当程序中所有用户线程执行完毕之后,不管守护线程是否结束,系统都会自动退出

        如果用户线程全部结束了,意味着程序需要完成的业务操作已经结束了,系统可以退出
了。所以当系统只剩下守护进程的时候,java虚拟机会自动退出

       设置守护线程,需要在start()方法之前进行

用户线程

        是系统的工作线程,它会完成这个程序需要完成的业务操作

守护线程

        是一种特殊的线程,在后台默默地完成一些系统性的服务,比如垃圾回收线程

package com.atguigu.itdachang;

/**
 * @auther zzyy
 * @create 2020-07-07 15:39
 */
public class DaemonDemo
{
public static void main(String[] args)
{
    Thread t1 = new Thread(() -> {
        System.out.println(Thread.currentThread().getName()+"\t 开始运行,"+(Thread.currentThread().isDaemon() ? "守护线程":"用户线程"));
        while (true) {

        }
    }, "t1");
    //线程的daemon属性为true表示是守护线程,false表示是用户线程
    t1.setDaemon(true);
    t1.start();
    //3秒钟后主线程再运行
    try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); }

    System.out.println("----------main线程运行完毕");
}

}
 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值