sleep与wait

sleep是Thread方法,使得当前线程从运行态变为阻塞态。但它不会释放对象的锁。
wait方法是Object方法,它的作用是使得当前拥有对象锁的线程从运行态变为阻塞态,
它会释放对象的锁

sleep测试

package com.java.javabase.thread.sleep;import lombok.extern.slf4j.Slf4j;@Slf4j
public class SleepTest {private static int coutsize = 10;private static Object obj = new Object();public static void main(String[] args) {Thread t1 =new ThreadOne("t1");Thread t2 =new ThreadOne("t2");t1.start();t2.start();}static class ThreadOne extends Thread {public ThreadOne(String name){super(name);}@Overridepublic void run() {synchronized (obj){int i = 0;try {while (i < coutsize) {log.info("current thread is : {} sleep {} times ",Thread.currentThread().getName(),i++);Thread.sleep(300);}} catch (InterruptedException e) {e.printStackTrace();}}}}
}

说明

对于拥有同一个Object对象的两个线程,当一个线程持有对象的锁,虽然多次执行Thread,线程从运行态变为阻塞态,但也不会释放对象的锁,
其他的线程只能等待。

测试结果

2019-07-29 16:49:22,156   [t1] INFO  SleepTest  - current thread is : t1 sleep 0 times
2019-07-29 16:49:22,469   [t1] INFO  SleepTest  - current thread is : t1 sleep 1 times
2019-07-29 16:49:22,782   [t1] INFO  SleepTest  - current thread is : t1 sleep 2 times
2019-07-29 16:49:23,094   [t1] INFO  SleepTest  - current thread is : t1 sleep 3 times
2019-07-29 16:49:23,407   [t1] INFO  SleepTest  - current thread is : t1 sleep 4 times
2019-07-29 16:49:23,720   [t1] INFO  SleepTest  - current thread is : t1 sleep 5 times
2019-07-29 16:49:24,032   [t1] INFO  SleepTest  - current thread is : t1 sleep 6 times
2019-07-29 16:49:24,345   [t1] INFO  SleepTest  - current thread is : t1 sleep 7 times
2019-07-29 16:49:24,658   [t1] INFO  SleepTest  - current thread is : t1 sleep 8 times
2019-07-29 16:49:24,970   [t1] INFO  SleepTest  - current thread is : t1 sleep 9 times
2019-07-29 16:49:25,283   [t2] INFO  SleepTest  - current thread is : t2 sleep 0 times
2019-07-29 16:49:25,596   [t2] INFO  SleepTest  - current thread is : t2 sleep 1 times
2019-07-29 16:49:25,909   [t2] INFO  SleepTest  - current thread is : t2 sleep 2 times
2019-07-29 16:49:26,221   [t2] INFO  SleepTest  - current thread is : t2 sleep 3 times
2019-07-29 16:49:26,534   [t2] INFO  SleepTest  - current thread is : t2 sleep 4 times
2019-07-29 16:49:26,847   [t2] INFO  SleepTest  - current thread is : t2 sleep 5 times
2019-07-29 16:49:27,159   [t2] INFO  SleepTest  - current thread is : t2 sleep 6 times
2019-07-29 16:49:27,472   [t2] INFO  SleepTest  - current thread is : t2 sleep 7 times
2019-07-29 16:49:27,785   [t2] INFO  SleepTest  - current thread is : t2 sleep 8 times
2019-07-29 16:49:28,098   [t2] INFO  SleepTest  - current thread is : t2 sleep 9 times 

转载于:https://www.cnblogs.com/JuncaiF/p/11265945.html

java并发:初探sleep方法相关推荐

  1. java并发初探ConcurrentHashMap

    java并发初探ConcurrentHashMap Doug Lea在java并发上创造了不可磨灭的功劳,ConcurrentHashMap体现这位大师的非凡能力. 1.8中ConcurrentHas ...

  2. java并发初探CyclicBarrier

    java并发初探CyclicBarrier CyclicBarrier的作用 CyclicBarrier,"循环屏障"的作用就是一系列的线程等待直至达到屏障的"瓶颈点&q ...

  3. java并发初探CountDownLatch

    java并发初探CountDownLatch CountDownLatch是同步工具类能够允许一个或者多个线程等待直到其他线程完成操作. 当前前程A调用CountDownLatch的await方法进入 ...

  4. java并发初探ConcurrentSkipListMap

    java并发初探ConcurrentSkipListMap ConcurrentSkipListMap以调表这种数据结构以空间换时间获得效率,通过volatile和CAS操作保证线程安全,而且它保证了 ...

  5. java并发初探ThreadPoolExecutor拒绝策略

    java并发初探ThreadPoolExecutor拒绝策略 ThreadPoolExecuter构造器 corePoolSize是核心线程池,就是常驻线程池数量: maximumPoolSize是最 ...

  6. java并发初探ReentrantWriteReadLock

    java并发初探ReentrantWriteReadLock ReenWriteReadLock类的优秀博客 ReentrantReadWriteLock读写锁详解 Java多线程系列--" ...

  7. java 并发测试main方法_Java并发测试

    要求:模拟200个设备,尽量瞬间并发量达到200. 思路 第一种:线程池模拟200个线程--wait等待线程数达200--notifyAll唤醒所有线程 第二种:线程池模拟200个线程--阻塞线程-- ...

  8. java并发执行一个方法_JAVA的执行并发原理

    Volatile Volatile关键字用于确保共享数据的可见性与有序性,但是并不能保证方法的原子性,在程序中对Volatile关键字使用得当的话,它比synchronized的使用和执行成本会更低, ...

  9. java 并发测试main方法_java并发编程test之synchronized测试

    synchronized关键字可以用于声明方法,也可以用于声明代码块; package com.test.java; public class SyncTest { public static voi ...

最新文章

  1. SLF4J log4j 学习笔记一
  2. python将运行结果用窗口打开-如何打开新控制台并运行python脚本
  3. 汇编和python-PyAsm-在python中嵌入汇编 | 学步园
  4. 序列密码体制(python随机数密码,RC4,线性反馈移位寄存器
  5. Codeigniter 获取当前的控制器名称和方法名称
  6. 基于Xml 的IOC 容器-开始读取配置内容
  7. MAX13085E/MAX485 _中文翻译
  8. Leetcode 系列 | 反转链表
  9. LDAP命令介绍---dsconfig子命令----help-distribution显示与分发相关的子命令
  10. 初一的学生,上了初中成绩就下降了一大截,该怎么办?
  11. 【遥感图像处理软件】ArcGIS Pro 使用总结
  12. 腾讯微博等7家网站实行实名制
  13. matlab gui串口通信,Matlab GUI上位机界面实现串口通信
  14. 计算机网络 | IPv6 | 什么是IPv6
  15. 实验——田忌赛马c++
  16. logo设计-中文设计
  17. Carson带你学Android:这是一份全面 详细的Android代码命名规范
  18. Java imageio底层_java - Java中的ImageIO问题 - 堆栈内存溢出
  19. PYTHON实践——GUI界面
  20. BI PUBLISHER RTF模板制作PIVOT表和重分组

热门文章

  1. angular6 中使用bootstrap
  2. foo bar的意思
  3. juc原子类之五:AtomicLongFieldUpdater原子类
  4. IC卡设备驱动模块的代码
  5. memcached客户端(分布算法)
  6. 用 或 || 取代常规 if - else 结构
  7. 程序员的幽默--火车
  8. c语言python零基础教学_编程零基础应当如何开始学习 Python?
  9. 浅谈Eclipse GEF
  10. Flume Channel