Java 콜백 함수 상세 및 사용

5340 단어 Java리셋 함수
Java 콜백 함수 상세 정보
선언:
C 언어에서 콜백 함수 해석:
콜백 기능(Callback Function)은 어떤 함수입니까?
함수는 호출되는 데 사용되며, 우리가 함수를 호출하는 방법은 두 가지가 있다.
직접 호출: 함수 A의 함수체에서 함수 B의 함수 이름을 써서 호출하여 메모리에 대응하는 함수 B의 코드를 실행할 수 있도록 한다.여기서 A를 콜러(Caller), B를 콜러(Callee)라고 합니다.
간접 호출: 함수 A의 함수체에는 함수 B의 함수 이름이 나타나지 않고 함수 B를 가리키는 함수 지침 p를 사용하여 메모리에 있는 함수 B에 속하는 코드 단편을 실행할 수 있다. 멋있게 들린다.
직접 호출하는 것보다 간접 호출하는 것이 확실히 번거롭다. 그런데 왜 간접 호출을 사용해야 합니까?원인은 매우 간단하다. 함수 이름을 함수체에 직접 호출하여 컴파일러가 그렇게 컴파일한 후에 틀림없다. A는 B로 호출할 운명이다. 이런 프로그램은 프로그래머가 미리 설계한 절차에 따라 실행할 수 밖에 없다. 너무 융통성이 없다.이때 간접 호출의 커다란 유연성이 드러났다.만약 p가 함수 A의 매개 변수라면 (매개 변수는 변수이고 변수라면 변할 수 있을까!)그러면 프로그램의 최종 사용자는 조작을 통해 p의 지향을 완전히 바꿀 수 있다. 그러면 A는 p를 통해 함수를 호출할 때 서로 다른 함수를 호출할 기회가 생겨서 프로그램의 실용성과 확장성이 훨씬 강해진다.
WINDOWS에서 프로그래머는 시스템 DLL이 직접 작성한 방법을 호출하도록 하기 위해 DLL에서 콜백 함수(CALLBACK) 인터페이스를 이용하여 프로그램을 호출하는 것을 콜백이라고 부른다.인터페이스를 호출할 때, 정의된 매개 변수와 방법에 따라 엄격하게 호출해야 하며, 함수의 비동기화를 처리해야 한다. 그렇지 않으면 프로그램의 붕괴를 초래할 수 있다.이런 해석은 비교적 이해하기 어려운 것 같다. 여기서 간단한 예를 들어 프로그래머 A는 프로그램 (프로그램 a) 을 썼는데 그 중에서 리셋 함수 인터페이스가 미리 남아 있고 이 프로그램을 봉인했다.프로그래머 B는 a로 하여금 자신의 프로그램 b의 방법을 호출하게 하려고 한다. 그래서 그는 a의 인터페이스를 통해 자신의 b의 방법을 리셋한다.목적 달성.C/C++에서 리셋 함수를 사용하려면 리셋 함수는 호출자에게 자신의 바늘 주소를 알려야 하지만 JAVA에 바늘이 없으면 어떻게 합니까?우리는 인터페이스 (interface) 를 통해 리셋 함수를 정의할 수 있다.
정상적인 상황에서 개발자는 이미 정의된 API를 사용하는데 이 과정을 콜이라고 부른다.그러나 때때로 이렇게 수요를 만족시키지 못하면 프로그래머가 자신의 프로그램을 등록한 후에 사전에 많은 API를 정의하여 적당한 때에 등록하는 방법을 호출하도록 해야 한다. 이것을 CallBack이라고 한다.
"통상적으로 사람들이 말하는 리셋 함수는 일반적으로 다른 사람(이사)의 정해진 인터페이스 규범에 따라 쓰고 다른 사람(장삼)이 호출하기를 기다리는 함수이다. C 언어에서 리셋 함수는 함수 지침을 통해 전달된다. 자바에서는 다른 클래스나 라이브러리를 작성하는 사람(이사)이 인터페이스를 정하고 너(장삼)는이 인터페이스를 실현하고 이 구현류의 대상을 매개 변수로 다른 사람에게 전달하면 다른 사람의 프로그램이 필요할 때 그 인터페이스를 통해 당신이 작성한 함수를 호출합니다.
사용 기교: 인터페이스를 정하고 인터페이스에서 우리가 사용하고 싶은 방법을 설명합니다.
다른 방법에서 방금 정의된 리셋 인터페이스를 등록합니다
첫 번째 단계: 리셋 인터페이스 정의

package com.callback;
 
/**
 *
 @since 2012-02-02
 *
 @desc  
 */
public interface CallBackInterface
 {
 
  public void doSome(); 
   
  public void exectueMethod();
}
2단계: 이사가 작성한 프로그램

package com.callback;
 
/**
 *
 @since 2012-02-02
 *
 @desc  
 */
public class MethodB
 {
 
  public double getTime(CallBackInterface
 callBack) {
    long start
 = System.currentTimeMillis();
    callBack.exectueMethod();
    long end
 = System.currentTimeMillis();
    System.out.println("cost
 time=" +
 (end - start));
    return end
 - start;
  }
}
3단계: 장삼은 이사가 규정한 인터페이스를 실현한다

package com.callback;
 
/**
 *
 @since 2012-02-02
 *
 @desc  
 */
public class MethodA
 {
 
  public static void main(String
 args[]){
    MethodB
 b=new MethodB();
    // d MethodB , 
    double d=b.getTime(new CallBackInterface()
 {
       
      // 
      public void exectueMethod()
 {
        new MethodA().testMethod();
      }
       
      @Override
      public void doSome()
 {
         
      }
    });
    System.out.println("d="+d);
  }
   
  public void testMethod(){
    for(int i=0;i<10000;i++){
      System.out.print("");
    }
  }
}
출력 결과:

cost time=31
d=31.0
리셋 함수 이해
리셋이란 클라이언트 프로그램 클라이언트가 서비스 프로그램 서버의 어떤 함수 SA를 호출하고 서버는 어느 때 클라이언트의 어떤 함수 CB를 반대로 호출하는 것이다. 클라이언트에게 이 CB를 리셋 함수라고 한다.예를 들어 Win32 아래의 창 프로세스 함수는 전형적인 리셋 함수입니다.
일반적으로 클라이언트는 CB를 직접 호출하지 않는다. 클라이언트가 CB를 제공하는 목적은 서버가 그것을 호출하도록 하는 것이고 클라이언트가 어쩔 수 없이 제공하는 것이다.SERVER는 CLIENT가 제공한 CB를 누구라고 하는지 모르기 때문에 SERVER는 CB의 인터페이스 규범(함수 원형)을 약정하고 SERVER의 함수 R을 통해 SERVER가 CB 함수를 사용할 것을 미리 알려준다. 이 과정을 리셋 함수의 등록이라고 하고 R을 등록 함수라고 한다.웹 SERVERerviCliente와 Java의 RMI는 리셋 메커니즘에 사용되어 원격 서버 프로그램에 접근할 수 있습니다.
다음은 일반적인 예입니다.
어느 날, 내가 전화를 해서 너에게 문제를 물었는데 당연히 어려운 문제였다.:), 너는 일시적으로 해결 방법을 생각해 내지 못했고, 나는 전화를 들고 그곳에서 바보같이 기다릴 수 없었다. 그래서 우리는 네가 방법을 생각해 낸 후에 핸드폰으로 나에게 통지하기로 약속했다. 그러면 나는 전화를 끊고 다른 일을 처리하러 갈 것이다.XX분이 지나자 내 핸드폰이 울렸어. 너는 흥겹게 문제가 이미 끝났으니 이렇게 이렇게 처리해야 한다고 말했다.이야기는 여기서 끝난다.이 예는'비동기화 리셋'의 프로그래밍 모델을 설명한다.그 중에서 네가 나중에 핸드폰으로 나에게 결과를 알려주는 것은 바로'리셋'과정이다.내 핸드폰 번호는 반드시 이전에 너에게 알려줘야 한다. 이것이 바로 등록 리셋 함수이다.내 핸드폰 번호는 유효해야 하고 핸드폰이 당신의 호출을 받을 수 있어야 한다. 이것은 리셋 함수로서 반드시 인터페이스 규범에 부합해야 한다.
상기 개인을 통해 리셋 함수의 더 많은 응용은 이종 결합이라는 것을 느꼈다.예를 들어 aax에서 jServer는 구성 요소와 서버의 비동기적인 통신을 통해
리셋 함수
정교한 비유: 리셋 함수는 정말 당신이 가지고 있는 BP기와 비슷하다. 다른 사람에게 번호를 알려주고 일이 있을 때 전화하세요
리셋은 층간 협업에 사용되고 상부에서 이 층의 함수를 하층에 설치한다. 이 함수는 리셋이다. 하층부는 일정한 조건하에서 리셋을 촉발한다. 예를 들어 구동으로서 하나의 하층이다. 그는 데이터를 받을 때 이 층의 처리 작업을 완성하는 것 외에 리셋을 하고 이 데이터를 상부 응용층에 넘겨 진일보한 처리를 한다. 이것은 층별 데이터 통신에서 매우 보편적이다.
사실 리셋은 API와 매우 가깝다. 그들의 공통성은 모두 겹겹이 호출된 함수이다.그러나 차이점은 API는 저층이 고위층에 제공하는 호출이고 일반적으로 이 함수는 고위층에 대해 이미 알고 있다.반면에 리셋은 반대로 고위층이 밑에 제공하는 호출이다. 저층에 대해서는 알 수 없는 것이기 때문에 고위층이 설치해야 한다. 이 설치 함수는 사실 저층이 제공하는 API이다. 설치 후 저층은 이 리셋의 이름을 모르지만 함수 바늘을 통해 이 리셋을 저장한다. 호출이 필요할 때 이 함수 바늘과 관련된 매개 변수 바늘만 인용하면 된다.
사실: 리셋은 이 함수가 고위층에 쓰여 있고 저층은 하나의 함수 바늘을 통해 이 함수를 저장하고 어떤 사건의 촉발 아래 저층은 이 함수 바늘을 통해 고위층의 그 함수를 호출한다.
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기