0
点赞
收藏
分享

微信扫一扫

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

状态转换用在什么当中?

一、特征:

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

二、状态:

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

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

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

三、三种基本状态转换:

(1) 就绪→执行

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

(2) 执行→就绪

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

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

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

实际情况

开关处理:

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

这里用的单位是【纳秒】

经典开关控制【Java】语言实现_执行状态

状态修改次数基数是【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;
}

}

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

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

}

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

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

}

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

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


举报

相关推荐

0 条评论