안전이 클래스의 스레드를 확인하고 나는 이전 시험 문제에서 다음 비 스레드 안전 코드가 있습니다난 그냥 시험을 위해 공부하고
class Q3 {
private boolean f[] = new boolean[20];
public Q3() {
for (int j = 0; j < 20; j++) {
f[j] = true;
}
}
public void negate(int a, int b) {
for(int j = a; j < b; j++) {
f[j] = !f[j];
}
}
public void swap(int a, int b) {
boolean temp = f[a];
f[a] = f[b];
f[b] = temp;
}
}
내가 그것을 다음과 같은 조정을하여 스레드 안전 만들어를 :
class Q3 {
private boolean f[] = new boolean[20];
public Q3() {
for (int j = 0; j < 20; j++) {
f[j] = true;
}
}
synchronized void negate(int a, int b) {
for (int j = a; j < b; j++) {
f[j] = !f[j];
}
}
synchronized void swap(int a, int b) {
boolean temp = f[a];
f[a] = f[b];
f[b] = temp;
}
}
그러나 누군가 원래의 코드가 스레드 안전하지 않은 이유를 설명 할 수 있습니까? 나는 그렇게하지 않으면 코드를 안전하게 할 수있는 방법을 안다. 그러나 나는 여전히 코드가/스레드 안전성으로 정의되지 않았다는 것을 확신하지 못한다.
'Q3' 클래스가 어떻게 사용되고 있는지 보여줄 수 있습니까? –
정말 어떤 상황에서도 사용되지 않고 있습니다. 코드는 스레드의 안전성을 보장하기 위해 질문을합니다. 코드의 스레드가 아닌 스레드가 안전하지 않은 이유는 궁금합니다. 질문이지만 스레드 안전 코드인지 또는 스레드 안전하지 않은 코드인지 구분하는 방법을 알고 싶습니다. –
@ JohnP.Lally 솔루션을 게시하면서 가장 최근의 질문을 삭제했습니다. 'android : minSdkVersion = "10"'은 ' '이어야합니다. 귀하의 빌드가 실패해야합니다 –