내 코드는 AJAX UI (다중 스레드)에 의해 호출되고 포스트 데이터 처리는 Json에서 출력을 보냅니다. 최근에 코드를 리팩토링하는 동안 우리는 공통적이고 반복적 인 메서드를 별도의 파일로 옮겼습니다. 여기서는 정적/공유 데이터로 작업하지 않으므로 정적으로 만들었습니다. Parallel.foreach 또는 기타 멀티 스레드 시나리오에서 호출 할 때다중 스레드를 통한 정적 메서드 호출 - 서로의 입력 매개 변수를 간섭 할 수 있습니까?
public class Helper
{
public static C Method1(List<A> aList, List<B> bList)
{
C objC = new C();
// Create ObjC based on inputs aList and bList
return objC;
}
}
하는 지금, 나의 이해는 다음과 같은 호출은 아무 문제가없는 것입니다, 확인하시기 바랍니다 : 다음 샘플 디자인 우리의 정적 방법이다. 우리는 역시 가지고 그러나
C resultC = Helper.Method1(aList, bList);
는 (수있다 두 스레드가 상기 한 호출 및 aList, bList의 하나 개의 스레드 데이터가 다른 스레드에 의해 대체 할 수 하였기에, 따라서 결함이 결과를주는있을 수 예외), 그 문제에 대해 디버깅과 반복이 불가능합니다. 두 스레드가 실행되는 정확한 milli 초 내에 함께 실행/실행해야하기 때문에
여러분의 의견을 공유하기를 바랍니다. 위에서 언급 한 디자인이나 우리가 볼 수없는 구덩이가 있습니다. 우리는 쉽게 인스턴스 메소드로 대체 할 수 있습니다. 각 스레드는 작업 할 고유 한 인스턴스가 있기 때문에이 시나리오에서는 스레드 안전성이 확실합니다.하지만 필요하지 않을 수도 있고 인스턴스 생성을 유지하는 것이 번거롭다는 생각이들 때 편리하게 작업 할 수 있습니다. 정적 호출.
지금까지 코드 실행과 관련된 문제는 보지 못했지만, 만약 이런 일이 발생하면 두 개의 스레드가 동시에 올 수 있고 다른 스레드가 입력 매개 변수를 대체하는 경우 스레드가 여전히 처리 결과입니다.
모든 호출에는 고유 한 스레드가 있습니다. –
메소드를 호출하면 차이가 발생하지 않습니다. 사용 방법 * 수 *, 결과 변수를 정적 변수로 사용하면 발생할 수 있습니다. – Sayse
* 매개 변수 *는 여러 스레드에서 문제가되지 않습니다. * 매개 변수에 전달하는 값은 * 일 수 있지만, 사용자가 예제에서 알 수있는 방법은 없습니다. 즉, 동일한 목록 객체를 다른 스레드에서 두 개의 메소드 호출에 전달하면 문제가 발생하지만 매개 변수 자체는 문제가되지 않습니다. –