我是靠谱客的博主 着急身影,最近开发中收集的这篇文章主要介绍java while和if的区别 用多线程来展示 两者的区别 总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

while用于循环语句,而if用于判断和分支语句。
由于你并没有指明是什么程序,只能泛泛而谈了。
if 语句中,常用格式为:
if(判断条件){执行语句}
上面的结构,只是进行一次判断。
if与else结合,就可形成一个分支结构的语句,形如
if(判断条件1){执行语句1}
else if (判断条件2){执行语句2}
else if (判断条件3){执行语句3}
else if (...) {...}
else{执行语句n}
有些程序则用的是case,实际上与上面的else if等价。
While一般有两种形式
形式1:do{执行语句} While(判断条件),执行效果是先运行执行语句,再进行while条件判断,如果符合条件,则返回继续执行do后的执行语句,由此形成循环。
形式2:While(判断条件)do{执行语句},先进行判断,而运行执行语句。执行语句运行完毕,自动返回继续判断while中的条件是否符合,符合的话,继续运行执行语句,不符合,则退出循环。


总结


相同点:while与if语句的最大的相同点是都有至少一步的判断。
最大的不同点是:IF语句运行完毕后,接着运行下面的语句。而While中的执行语句运行完毕后,还要进行继续判断条件是否符合循环条件,根据判断的条件,再决定是否执行语句或继续运行下面的程序。

下面用一个多线程生产消费者来展现两者的区别

/**
 * 面试题:写一个固定容量同步容器,拥有put和get方法,以及getCount方法,
 * 能够支持20个生产者线程以及100个消费者线程的阻塞调用
 * 
 * 使用wait和notify/notifyAll来实现
 * 
 * @author zfq
 */


import java.util.LinkedList;
import java.util.concurrent.TimeUnit;

public class MyContainer1<T> {
	final private LinkedList<T> lists = new LinkedList<>();
	final private int MAX = 10; //最多10个元素
	private int count = 0;
	
	
	public synchronized void put(T t) {
		while (lists.size() == MAX) { //想想为什么用while而不是用if?
			try {
				this.wait(); //effective java
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		
		lists.add(t);
		++count;
		this.notifyAll(); //通知消费者线程进行消费
	}
	
	public synchronized T get() {
		T t = null;
    /*想想为什么用while而不是用if?因为换成if之后notifyAll线程被唤醒之后
		就不会判断lists.size() == 0 ,继续执行下面的程序报错
		Exception in thread "c22" java.util.NoSuchElementException,为啥,因为你没判断,
		lists为空了,生产者可能还没来得及生产馒头,吃了个寂寞*/
		while(lists.size() == 0) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		t = lists.removeFirst();
		count --;
		this.notifyAll(); //通知生产者进行生产
		return t;
	}
	
	public static void main(String[] args) {
		MyContainer1<String> c = new MyContainer1<>();
		//启动消费者线程
		for(int i=0; i<100; i++) {
			new Thread(()->{
				for(int j=0; j<50; j++) System.out.println(c.get());
			}, "c" + i).start();
		}
		
		try {
			TimeUnit.SECONDS.sleep(2);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		//启动生产者线程
		for(int i=0; i<20; i++) {
			new Thread(()->{
				for(int j=0; j<250; j++) c.put(Thread.currentThread().getName() + " " + j);
			}, "p" + i).start();
		}
	}
}

 


 

最后

以上就是着急身影为你收集整理的java while和if的区别 用多线程来展示 两者的区别 总结的全部内容,希望文章能够帮你解决java while和if的区别 用多线程来展示 两者的区别 总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部