龙空技术网

java一个线程负责客户端到队列另外一个线程负责从队列输出数据

爱音乐的程序员小新人 298

前言:

当前朋友们对“按钮java”大体比较珍视,看官们都需要分析一些“按钮java”的相关内容。那么小编也在网摘上收集了一些有关“按钮java””的相关文章,希望朋友们能喜欢,大家一起来学习一下吧!

直接上码分析

package test; import java.applet.Applet;import java.awt.Button;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Queue;import java.util.Scanner;import java.util.concurrent.LinkedBlockingQueue; import test.Test7.Input;import test.Test7.Resolve; public class Test6{ private static Queue<String> queue = new LinkedBlockingQueue();//定义一个队列来存储数据 static class Input extends Thread{// 接收控制台输入 public void run(){ String name = null; Scanner sc = new Scanner(System.in); System.out.println("请输入字符串:"); while(true){ name=sc.nextLine(); // 如果立即可行且不违反容量限制, // 则将指定的元素插入此双端队列表示的队列中(即此双端队列的尾部), // 并在成功时返回 true;如果当前没有空间可用,则返回 false queue.offer(name); if ("exit".equals(name)) break; synchronized (queue){//notify()是Object()中定义的方法所以只能用在synchronized()方法中。 queue.notify();//唤醒在负责输出线程中的等待的告诉队列中有元素了它可以输出了 } } }} static class Test14 extends Thread{ public void run(){ while(true){ if(queue.size()>0){ //System.out.println(queue.size()); String name = queue.poll(); System.out.println(name); } else{ synchronized (queue){ try { queue.wait();//相当于queue.wait(0),队列中没有东西则默认无限等待直到队列中有东西并且通知他 }catch (InterruptedException e) { e.printStackTrace(); }//如果队列中没有东西则等待 } } } } } public static void main(String[] args) { new Input().start(); new Test14().start();} }

输入线程输入输出线程读出运行截图

如果输入线程中没有

synchronized (queue){ queue.notify();}那么输出线程将会一直等待,所以必须输入线程通知输出线程队列里面有内容了可以输出东西了它才会被唤醒。

如下图:输出线程没有输出处于一直等待

标签: #按钮java