前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >经典开关控制【Java】语言实现

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

作者头像
红目香薰
发布2022-11-30 17:49:51
5190
发布2022-11-30 17:49:51
举报
文章被收录于专栏:CSDNToQQCode

状态转换用在什么当中?

一、特征:

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

二、状态:

1:就绪状态 当进程已分配到除CPU以外的所有必要的资源, 只要获得处理机便可立即执行,这时的进程状态称为就绪状态。 2:执行状态 当进程已获得处理机,其程序正在处理机上执行 ,此时的进程状态称为执行状态。 3:阻塞状态 正在执行的进程,由于等待某个事件发生而无法 执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可 有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。

三、三种基本状态转换:

(1) 就绪→执行 处于就绪状态的进程,当进程调度程序为之分配了处理机后, 该进程便由就绪状态转变成执行状态。 (2) 执行→就绪 处于执行状态的进程在其执行过程中,因分配给它的一个时间 片已用完而不得不让出处理机,于是进程从执行状态转变成就 绪状态。 (3) 执行→阻塞 正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。 (4) 阻塞→就绪 处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。

实际情况

开关处理:

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

这里用的单位是【纳秒】

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

1、一个开关

代码语言:javascript
复制
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、两个开关

代码语言:javascript
复制
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、多个开关

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

代码语言:javascript
复制
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;
	}

}

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 状态转换用在什么当中?
    • 一、特征:
      • 二、状态:
        • 三、三种基本状态转换:
        • 实际情况
        • 1、一个开关
        • 2、两个开关
        • 3、多个开关
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档