欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java 第23天 高级进阶篇 线程通信 专篇 (四.)

程序员文章站 2022-10-03 16:04:55
写在前言 : 学习资源B站是最好的也是很全面。1 、现在出去面试,面试官老是会问你一句话Java 怎么样?不管是大数据岗位还是数据库都会问一句。 回来痛下决心,决定探索下这门语言的精髓,大数据很多框架也都是Java 写的,的确懂一门语言,比较稳妥。路也宽敞!!!不然就和吃饭没筷子,那么尴尬。把每天学习到的 Java知识分享到这里会。直到能自己写个复杂一点Dome得出来。2、为了监督自己探索这门语言的动力与决心。特此这段话放到前面!!!3、挑战下自己 到底是笨 还是学不会,还是不想学。 好运目录....
写在前言 : 学习资源B站是最好的也是很全面。
1 、现在出去面试,面试官老是会问你一句话Java 怎么样?
不管是大数据岗位还是数据库都会问一句。 回来痛下决心,决定探索下这门语言的精髓,大数据很多框架也都是Java 写的,的确懂一门语言,比较稳妥。路也宽敞!!!不然就和吃饭没筷子,那么尴尬。把每天学习到的 Java知识分享到这里会。直到能自己写个复杂一点Dome得出来。
2、为了监督自己探索这门语言的动力与决心。特此这段话放到前面!!!
3、挑战下自己 到底是笨 还是学不会,还是不想学。 好运

一、线程通信栗子:

package Work_ZQ4;

/**

  • 使用线程交替打印 1- 100 以内的数字
  • 线程1和线程2 交替打印
    */

class Number implements Runnable{
private int number =1;
@Override
public void run() {
while (true){
synchronized (this){
// notify 唤醒一个线程
notify();
if (number <= 100){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":"+number);
number ++;
try {
// 使得调用wait()方法的线程进入阻塞状态.
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else {
break;
}
}
}
}
}
public class CommunicationTest {
public static void main(String[] args) {
Number number = new Number();
Thread t1 = new Thread(number);
Thread t2 = new Thread(number);
t1.setName(“线程1”);
t2.setName(“线程2”);
t1.start();
t2.start();
}
}

Java 第23天 高级进阶篇  线程通信 专篇 (四.)

二、 以下三个方法是定义在:Object.lang 包下。

涉及到的三个方法:

wait(): 一旦执行此方法,当前线程会进入阻塞状态,并释放同步监视器。
notify():一旦执行此方法,就会唤醒被wait的一个线程。如果多个线程被wait,就会唤醒优先级高的。
notify ALL():一旦执行此方法,就会唤醒所有被wait的线程。。。

说明:

1、wait(),notify(),notify ALL()三个方法必须使用在同步代码块和同步方法中。

2、三个方法的调用者都是:this
3、三个方法的调用者必须是同步代码块或同步方法的同步监视器。。


sleep() 和wait() 的异同?

1、相同点: 一旦执行此方法,都可以使得当前的线程进入阻塞状态。
2、不同点:
(1)两个方法的声明位置不同:Thread类中声明sleep(),Object 类中声明wait().
(2)调用的要求不同:sleep()可以在任何需要的场景下调用,wait 必须使用在同步代码块中。
(3)关于是否释放同步监视器:如果两个方法都使用在同步监视器中,sleep() 不会释放锁,wait()会释放锁。

 
 
 

【转载注明出处,还望尊重原创 】

 

【作者水平有限,如有错误欢迎指正 .】

本文地址:https://blog.csdn.net/weixin_46163590/article/details/107580070

相关标签: Java 基础知识