Java 如何避免使用树莓轮询?

Java 如何避免使用树莓轮询?,java,raspberry-pi,listener,infinite-loop,polling,Java,Raspberry Pi,Listener,Infinite Loop,Polling,我正在用Java和Raspberry做一个项目,我使用Pi4j库。 我不使用轮询,因此,例如,我使用以下代码: public class ListenGpioExample { public static void main(String args[]) throws InterruptedException { System.out.println("<--Pi4J--> GPIO Listen Example ... started."); // crea

我正在用Java和Raspberry做一个项目,我使用Pi4j库。 我不使用轮询,因此,例如,我使用以下代码:

public class ListenGpioExample {

  public static void main(String args[]) throws InterruptedException {
    System.out.println("<--Pi4J--> GPIO Listen Example ... started.");

    // create gpio controller
    final GpioController gpio = GpioFactory.getInstance();

    // provision gpio pin #02 as an input pin with its internal pull down resistor enabled
    final GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin(RaspiPin.GPIO_02, PinPullResistance.PULL_DOWN);

    // create and register gpio pin listener
    myButton.addListener(new GpioPinListenerDigital() {
        @Override
        public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) {
            // display pin state on console
            System.out.println(" --> GPIO PIN STATE CHANGE: " + event.getPin() + " = " + event.getState());
        }

    });

    System.out.println(" ... complete the GPIO #02 circuit and see the listener feedback here in the console.");

    // keep program running until user aborts (CTRL-C)
    for (;;) {
        Thread.sleep(500);
    }

    // stop all GPIO activity/threads by shutting down the GPIO controller
    // (this method will forcefully shutdown all GPIO monitoring threads and scheduled tasks)
    // gpio.shutdown();   <--- implement this method call if you wish to terminate the Pi4J GPIO controller        
}}
公共类ListenGpioExample{
公共静态void main(字符串args[])引发InterruptedException{
System.out.println(“GPIO侦听示例…已启动”);
//创建gpio控制器
最终GpioController gpio=GpioFactory.getInstance();
//将gpio引脚#02作为输入引脚,并启用其内部下拉电阻器
最终GPIOPIIndigitalInput myButton=gpio.provisionDigitalInputPin(RaspiPin.gpio_02,PinPullResistance.PULL_DOWN);
//创建并注册gpio引脚侦听器
myButton.addListener(新的GpioPinListenerDigital(){
@凌驾
public void handlePiopIndicatalStateChangeEvent(GPIOPiIndigitalStateChangeEvent){
//在控制台上显示pin状态
System.out.println(“-->GPIO引脚状态更改:”+event.getPin()+“=”+event.getState());
}
});
System.out.println(“…完成GPIO#02电路,并在控制台中查看侦听器反馈。”);
//保持程序运行直到用户中止(CTRL-C)
对于(;;){
睡眠(500);
}
//通过关闭GPIO控制器停止所有GPIO活动/线程
//(此方法将强制关闭所有GPIO监视线程和计划任务)

//gpio.shutdown();否,这不是轮询。此示例使用事件侦听器,一旦gpio引脚发生状态更改,该侦听器将启动

正如您在网站上看到的:

侦听器实现基于GPIO硬件中断,而不是 州投票

(;;)
用于使程序保持活动状态,直到用户停止它(您可以在注释中看到)