关于java中线程(Thread)问题?
典型的生产者消费者问题。
每次都notify,但是如果其他线程没有调用wait,其实notify也没啥意义。
当wp=8时,已经wait了。但是如果不消费,也就是wp--,那么它永远也是不会被其他线程notify,也就不会醒来,一直wait下去,那么怎么都不能达到9的。
不知道理解否?
currentThread是方法不是常量
Thread.currentThread().sleep(3000);
使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是如果有Synchronized同步块,其他线程仍然不同访问共享数据。注意该方法要捕获异常
比如有两个线程同时执行(没有Synchronized),一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果没有Sleep()方法,只有高优先级的线程执行完成后,低优先级的线程才能执行;但当高优先级的线程sleep(5000)后,低优先级就有机会执行了。
总之,sleep()可以使低优先级的线程得到执行的机会,当然也可以让同优先级、高优先级的线程有执行的机会。
2.join()
join()方法使调用该方法的线程在此之前执行完毕,也就是等待调用该方法的线程执行完毕后再往下继续执行。注意该方法也要捕获异常。
3.wait()
wait方法用于协调多个线程对共享数据的存取,所以必须在Synchronized语句块内使用wait方法
wait()方法使当前线程暂停执行并释放对象锁标志
参考资料:http://gatusso52.javaeye.com/blog/483973
sleep方法在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
join 方法等待该线程终止的时间最长为 millis 毫秒。
相关视频
Java多线程专题之Callable、Future与FutureTask(含源码分析)
大家好,一直以来我都本着用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 基础知识 的铺垫。目前正在出一个Java多线程专题长期系列教程,从入门到进阶, 篇幅会较多, 喜欢的话,给个关注?? ~ 适合人群 有一定的Java基础 想学习或了解多线程开发 ...
java中什么叫做线程?什么叫多线程?多线程的特点是什么?
程序的运行速度可能加快 ·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。线程定义比较抽象,简单的说就是一个代码执行流。许多执行流可以混合在一起由CPU调度。线程是允许各种任务交互执行的方式。Java的线程在...
Thread的使用说明
Java当中实现多线程的方法主要有两种方式:集成Thread类和实现Runnable接口定义线程的运行时行为,本文简单介绍一下Thread的简单使用 (1) 定义 Thread:Java中实现线程的具体类,封装了所有的线程操作,通过Thread实例来控制线程行为(运行,停止) (2)作用 实现多线程 (3)优点 实现简单 ...
java,线程Thread(Runnable target) ?
你的理解很正确,只要是实现了Runnable接口的类都可以传进去。这个参数可以是API中已经有的,也可以是自己写的。常用的创建线程的方法有两种,第一种就是继承Thread类,直接new 出来就可以,Thread类本身也实现了Runnable接口。第二种方法就是实现Runnable接口里面的run方法。语法正如你的代码一样 在...
thread是在什么包中
因此,当你需要创建和使用线程时,可以直接使用 Thread 类,例如通过继承 Thread 类并重写其 run 方法来定义线程的行为。总结:Thread 类是 Java 编程语言中用于创建和管理线程的核心类,它定义在 java.lang 包中,作为 Java 语言基础框架的一部分,为开发者提供了强大的多线程编程能力。
Thread 默认 name 的由来,java
在Java中,Thread类的默认名称遵循特定的生成规则,其设计旨在为未显式命名的线程提供唯一标识。以下是详细解析:1. 默认名称的生成规则格式:Thread-<n>其中<n>是一个从0开始递增的整数(如Thread-0、Thread-1等)。代码实现:通过"Thread-" + nextThreadNum()拼接字符串生成,nextThread...