经典开关控制【Java】语言实现

举报
红目香薰 发表于 2022/07/29 10:09:43 2022/07/29
【摘要】 ​状态转换用在什么当中?一、特征:1:动态性,2:并发性,3:独立性,4:异步性。二、状态:1:就绪状态 当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。2:执行状态 当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。3:阻塞状态 正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻...

状态转换用在什么当中?

一、特征:

1:动态性,2:并发性,3:独立性,4:异步性。

二、状态:

1:就绪状态 当进程已分配到除CPU以外的所有必要的资源,
只要获得处理机便可立即执行,这时的进程状态称为就绪状态。

2:执行状态 当进程已获得处理机,其程序正在处理机上执行
,此时的进程状态称为执行状态。

3:阻塞状态 正在执行的进程,由于等待某个事件发生而无法
执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可
有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。

三、三种基本状态转换:

(1) 就绪→执行

处于就绪状态的进程,当进程调度程序为之分配了处理机后,
该进程便由就绪状态转变成执行状态。

(2) 执行→就绪

处于执行状态的进程在其执行过程中,因分配给它的一个时间
片已用完而不得不让出处理机,于是进程从执行状态转变成就
绪状态。

(3) 执行→阻塞
 
正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。

(4) 阻塞→就绪
 
处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。

实际情况

开关处理:

一般控制几十个几百个的小二极管的灯,效率还是比较高的。

这里用的单位是【纳秒】

编辑

状态修改次数基数是【1000】次。

1、一个开关

package action;

import java.util.Iterator;
import java.util.Random;

public class demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Random random = new Random();
		int count=1000;
		long start = System.nanoTime();
		for (int i = 0; i < count; i++) {
			int nextInt = random.nextInt(2);
			int changeState = changeState(nextInt);
			System.out.print("输入:"+(nextInt==0?"关":"开"));
			System.out.print("-------------");
			System.out.print("输出:");
			System.out.println(changeState==0?"关":"开");
		};
		long end = System.nanoTime();
		System.out.println("累计"+count+"的值用时:"+(end-start)+"纳秒");
		System.out.println("累计"+count+"的值用时:"+((end-start)/1000000)+"毫秒");
	}
	/**
	 * 修改状态
	 * @param state
	 * @return
	 */
	public static int changeState(int state) {
		return state==0?1:0;
	}

}

编辑

2、两个开关

package action;

import java.util.Iterator;
import java.util.Random;

public class demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Random random = new Random();
		int count=1000;
		long start = System.nanoTime();
		for (int i = 0; i < count; i++) {
			int one = random.nextInt(2);
			int two = random.nextInt(2);
			int[] arr=changeState(new int[] {one,two});
			System.out.print("输入:"+(one==0?"关":"开")+(two==0?"关":"开"));
			System.out.print("-------------");
			System.out.print("输出:");
			System.out.println((arr[0]==0?"关":"开")+(arr[1]==0?"关":"开"));
		};
		long end = System.nanoTime();
		System.out.println("累计"+count+"的值用时:"+(end-start)+"纳秒");
		System.out.println("累计"+count+"的值用时:"+((end-start)/1000000)+"毫秒");
	}
	/**
	 * 修改状态
	 * @param state
	 * @return
	 */
	public static int[] changeState(int[] state) {
		return new int[]{state[0]==0?1:0,state[1]==0?1:0};
	}

}

编辑

3、多个开关

多个开关就不能写死了,得利用遍历了。

package action;

import java.util.Iterator;
import java.util.Random;

public class demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Random random = new Random();
		int count=1000;
		int arrLen=5;
		long start = System.nanoTime();
		for (int i = 0; i < count; i++) {
			int[] arr=new int[arrLen];
			for (int j = 0; j < arr.length; j++) {
				arr[j]=random.nextInt(2);
			}
			int[] arrs=changeState(arr);
			System.out.print("输入:");
			for (int k : arr) {
				System.out.print(k==0?"关":"开");
			}
			System.out.println();
			System.out.print("输出:");
			for (int k : arrs) {
				System.out.print(k==0?"关":"开");
			}
			System.out.println();
		};
		long end = System.nanoTime();
		System.out.println("累计"+count+"的值用时:"+(end-start)+"纳秒");
		System.out.println("累计"+count+"的值用时:"+((end-start)/1000000)+"毫秒");
	}
	/**
	 * 修改状态
	 * @param state
	 * @return
	 */
	public static int[] changeState(int[] state) {
		int[] arr=new int[state.length];
		for (int i = 0; i < state.length; i++) {
			arr[i]=state[i]==0?1:0;
		}
		return arr;
	}

}

编辑

恭喜你,无聊的知识又增加了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。