并发编程
并发编程
撞撞~
这个作者很懒,什么都没留下…
展开
-
守护 (Daemon) 线程和用户(User)线程
一、概述用户 (User) 线程可以认为是系统的工作线程,它会完成整个系统的业务操作守护 (Daemon) 线程是 JVM 中用户线程的 “佣人”。一旦所有用户线程都结束运行,守护线程会随 JVM一起结束工作;当一个Java应用,只有守护线程的时候,虚拟机就会自然退出守护线程在退出的时候并不会执行finnaly块中的代码二、示例public class ThreadDemo implements Runnable{ public static void main(Strin原创 2020-07-20 13:38:54 · 344 阅读 · 0 评论 -
线程之stop()、wait()、suspend()、sleep()方法区别详解
一、sleep当前线程由RUNNABLE状态的会进入TIMED_WAITING(超时等待);超时等待过程中线程持有的锁并不会释放;1、APIThread.sleep(long millis); // 单位:毫秒Thread.sleep(long timeout, int nanos); // 毫秒,纳秒或TimeUnit.SECONDS.sleep(long timeout); // 这个时间单位可以优选,底层调用的其实还是Thread.sleep(ms, ns);2、示例pub原创 2020-07-20 13:07:37 · 2821 阅读 · 0 评论 -
notify() 和 notifyAll()方法的使用和区别
一、区别notify()和notifyAll()都是用来用来唤醒调用wait()方法进入等待锁资源队列的线程,区别在于:notify()唤醒正在等待此对象监视器的单个线程。 如果有多个线程在等待,则选择其中一个随机唤醒(由调度器决定),唤醒的线程享有公平竞争资源的权利notifyAll()唤醒正在等待此对象监视器的所有线程,唤醒的所有线程公平竞争资源二、示例notify()public class ThreadDemo implements Runnable{ static Object原创 2020-07-19 18:40:25 · 10633 阅读 · 0 评论 -
详解interrupt(),interrupted(),isInterrupted()用法的区别
API详解3种方法都是Thread类的API方法描述public void interrupt()中断调用该方法的线程,此处的中断不是线程就会done,而只是添加中断标志位,线程该往下执行还是会执行的public boolean isinterrupted()测试调用该方法的线程是否已被中断,不会清除中断标志位,其实就是测试中断标志位是否存在public static boolean interrupted()Thread.interrupted(),使用该静态方法原创 2020-07-18 22:34:57 · 682 阅读 · 0 评论 -
线程之死锁以及如何避免死锁
一、死锁如何产生的Java死锁指两个或多个线程之间,由于互相持有对方需要的锁,而永久处于阻塞状态。由于循环依赖导致彼此一直处于等待之中,没有任何个体可以继续前进。二、举个栗子栗子中,主线程和子线程都会使用LOCK_A 和LOCK_B资源,主线程占用LOCK_A后准备使用LOCK_B的时候,发现LOCK_B正在被子线程占用,而此时子线程也在等待LOCK_A被主线程释放,铸就会导致永久谁都无法获取到想要的锁,从而出现死锁public class DeadLock { private static fi原创 2020-07-17 16:48:26 · 647 阅读 · 0 评论 -
详解scheduleAtFixedRate 与 scheduleWithFixedDelay 的区别
scheduleAtFixedRate:是以period为间隔来执行任务的,如果任务执行时间小于period,则上次任务执行完成后会间隔period后再去执行下一次任务;但如果任务执行时间大于period,则上次任务执行完毕后会不间隔的立即开始下次任务而scheduleWithFixedDelay 是不管任务执行多久,都会等上一次任务执行完毕后再延迟delay后去执行下次任务不多bb,直接上来代码来瞅瞅。。。1、 scheduleAtFixedRate,任务执行时间小于period时public s原创 2020-07-17 00:36:19 · 4199 阅读 · 1 评论 -
创建线程的四种方式(继承Thread/实现Runnable/Callable+线程池)
创建线程的4种方式一、继承Thread类public class Main { public static void main(String[] args) {// // 1.创建Thread子类对象// ThreadDemo threadDemo = new ThreadDemo();// // 2.启动线程// threadDemo.start(); // 使用内部类方式 new Thread()原创 2020-06-09 23:17:54 · 411 阅读 · 0 评论