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

2022-11-30 17:49:51 浏览数 (1)

状态转换用在什么当中?

一、特征:

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;
	}

}

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

0 人点赞