java中线程存活和线程执行的问题!

 1 /*
 2 下面的程序会出现下面的情况,当Thread-0, Thread-1, Thread-2都被wait的时候,可能会同时苏醒
 3     Thread-0 put
 4     Thread-1 put
 5     Thread-2 put
 6     Thread-3 get//在此处,Thread-3拿到锁之后,将所有的等待的线程唤醒,才有了下面的输出
 7     Thread-2 put
 8     Thread-1 put
 9     Thread-0 put
10 */
11 
12 
13    虽然多个线程会同时苏醒,但是只有一个能获得cpu的执行权!
14    总之,同步中执行的只能是一个,但是存活的不一定就是一个!
15 
16 
17 class DuckD{
18     public void put(){
19         
20         synchronized(DuckD.class){
21           
22               System.out.println(Thread.currentThread().getName()+" put");
23               try{
24                  DuckD.class.wait();//Thread-0, Thread-1, Thread-2可能会同时在这里苏醒!
25               }catch(InterruptedException e){
26                  
27               }
28               //........
29         }
30     }
31     
32     public void get(){
33         
34         synchronized(DuckD.class){
35 
36                 DuckD.class.notifyAll();
37               System.out.println(Thread.currentThread().getName()+" get");
38               try{
39                  DuckD.class.wait();
40               }catch(InterruptedException e){
41                  
42               }         
43         }
44     }
45 }
46 
47 class ProduceD implements Runnable{
48     DuckD dk;
49     ProduceD(DuckD dk){
50        this.dk=dk;
51     }
52     public void run(){
53        while(true)
54          dk.put();
55     }    
56 }
57 
58 class ConsumeD implements Runnable{
59     DuckD dk;
60     ConsumeD(DuckD dk){
61        this.dk=dk;
62     }
63     public void run(){
64         while(true)
65           dk.get();
66     }    
67 }
68 
69 class Test{
70    public static void main(String[] args){
71        DuckD dk=new DuckD();
72        Thread t1=new Thread(new ProduceD(dk));
73        Thread t2=new Thread(new ProduceD(dk));
74        Thread t3=new Thread(new ProduceD(dk));
75        Thread t4=new Thread(new ConsumeD(dk));
76        
77        t1.start();
78        t2.start();
79        t3.start();
80        t4.start();
81    }
82 }

 

转载于:https://www.cnblogs.com/hujunzheng/p/3920873.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中多线程模拟(多生产,多消费,Lock实现同步锁,替代synchronized同步代码块)...

import java.util.concurrent.locks.*; class DuckMsg{int size;//烤鸭的大小String id;//烤鸭的厂家和标号DuckMsg(){}DuckMsg(int size, String id){this.sizesize;this.idid;}public String toString(){return id " 大小为:" size;} } class Duck{private int …

java encode 空格_javaWeb中URLEncoder.encode空格问题

近期开发一个在线坐席的功能。发现推送的消息中空格变成了 。查询发现URLEncoder.encode的问题。曾经用的时候也没注意过,解决的方法网上是对URLEncoder.encode的之后的字符串进行替换号,这样的方式假设真的有号那也被替换了。所以应该在URLEncoder.enco…

poj 1386 Play on Words(有向图欧拉回路)

1 /*2 题意:单词拼接,前一个单词的末尾字母和后一个单词的开头字母相同3 思路:将一个单词的开头和末尾单词分别做两个点并建一条有向边!然后判断是否存在欧拉回路或者欧拉路 4 5 再次强调有向图欧拉路或欧拉回路的判定方法&…

java web tomcat 实例_Java Web应用开发实例

[1.GIS的概念 1.1什么是gis 地理信息系统 (GIS, Geographic Information System) 是一种基于计算机的工具,它可以对在地球上存在的东西和发生的事件进行成图和分析。 GI上次提到了EclipseTomcatLomboz Java Web开发环境的配置,可环…

poj2513Colored Sticks(无向图的欧拉回路)

1 /*2 题意:将两端涂有颜色的木棒连在一起,并且连接处的颜色相同!3 思路:将每一个单词看成一个节点,建立节点之间的无向图!判断是否是欧拉回路或者是欧拉路4 5 并查集判通 奇度节点个数等于2或…

java java.lang.enum_源码阅读-java基础-java.lang.Enum

1、引言枚举类型是 JDK 5 之后引进的一种非常重要的引用类型,可以用来定义一系列枚举常量。相比与常量(public static final定义),在安全性、指意性、可读性方面更胜一筹。另外它可以和switch case搭配使用。2、类定义实际上在使用关键字enum创建枚举类型…

java中有关线程的题目

1,看一下下面程序错误发生在哪一行! class Test implements Runnable{public void run(Thread t){} }2,输出结果是什么? class Test{public static void main(String[] args){new Thread(new Runnable(){public void run(){System…

java 可逆的加密算法_java实现AES可逆加密算法

package com.hdu.encode;import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;/*** AES 是一种可逆加密算法,对用户的敏感信息加密处理 对…

森林转换成二叉树以及二叉树还原为森林代码

1 /*2 森林转换成二叉树3 思路:u的孩子节点为v1, v2, v3....(v1,v2,....互为兄弟节点) 4 那么将u的一个孩子节点(v1)连在u的左子树上,那么其他的孩子节点都连在v1的右子树上! 5 …

poj1062昂贵的聘礼(Dijkstra**)

1 /*2 题意: 物主有一个物品,价值为P,地位为L, 以及一系列的替代品Ti和该替代品所对应的"优惠"Vi3 g[u][i] 表示的是u物品被i物品替换后的优惠价格!(u>0, i>0)4 g[u][0]表示不用替换该物品的…

java openmp库_OpenMP的环境变量及库函数

OpenMP的环境变量:环境变量 描述 示例OMP_SCHEDULE 控制for循环任务分配结构的调度 OMP_SCHEDULE"guided,2"OMP_NUM_THREADS 设置默认线程的个数 OMP_SCHEDULE4OpenMP的库函数函数名称 描述int omp_get_num_threads(void) 返回当前使用的线程个数&#xf…

hdu1269迷宫城堡(判断有向图是否是一个强连通图)

1 /* 题意: 给你一个图,求这个有向图示否是一个强连通图(每两个节点都是可以相互到达的)! 思路1:按正向边dfs一遍,将经过的节点计数,如果记录的节点的个数小于…

mgg mysql_mgg文件怎么转换mp3格式?

步骤/方法方法/步骤1:下载载视频转换器,我们说到在官网下载比较好吧。下载完成之后,我们就直接点击进行安装,一般 在安装的过程也是非常快速的,主要是按照安装向导上的步骤进行就可以了。方法/步骤2:安装好之后,我们就…

poj 2385Apple Catching(简单dp)

1 /*2 题意: 有两棵苹果树,每一棵苹果树每一秒间隔的掉落下来一个苹果,一个人在树下接住苹果,不让苹果掉落!3 人在两棵树之间的移动是很快的!但是这个人移动的次数是有限制的,问最多可以…

java dao 泛型的好处_java中泛型有什么作用

泛型的作用如下:1、类型安全泛型的主要目标是提高 Java 程序的类型安全。编译时的强类型检查;通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或…

poj3249Test for Job(记忆化搜索)

1 /*2 题意:给一个DAG图,n个节点,每个节点都对应一个值,入度为零的点走到出度为零的点,计算所有可能路径3 经过节点值的和最大!4 5 思路:记忆话搜索:也就是如果我们搜索…

Java两同_java:一个类实现的两个接口里都有同一个方法(名),怎么处理?

不一定,关键要看子类是否是抽象类。如果子类是非抽象类,则必须实现接口中的所有方法;如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在!1、抽象类定义抽象类往往用来表征对…

ZOJ3805Machine(二叉树左右子树变换)

1 /*2 题意:建立一棵二叉树,左子树和父节点占一个宽度,右子树另外占一个宽度!3 使任意左右子树交换顺序,使得整个树的宽度最小!4 思路:递归交换左右子树 ! …

java ==和=_Java ==和equals()的区别

前言本篇文章讲的是从JVM角度比较和equals的区别一:** Java数据类型分类**Paste_Image.png1:基本数据类型又称为原始数据类型,他们之间的比较应该使用(),比较的是他们的值。2:引用数据类型当引用数据类型用()进行比较&…

ZOJ 3804 YY's Minions (简单模拟)

1 /*2 题意&#xff1a;一个矩阵中有 n*m个宠物&#xff0c;每一个宠物都有一个状态&#xff0c; 1醒着的&#xff0c;0睡着的3 X离开的&#xff01;如果这个宠物&#xff08;醒着的&#xff09;的周围醒着的个数>3 || <2它就会睡着&#xff0c;4 如果这个宠物&…