인터뷰를 한 후 문장의 단어 수를 세는 함수를 작성하도록 요청했습니다. 이 함수는 스레드로부터 안전해야합니다. 다음 방법을 사용할 수 있습니까?자바에서 스레드 안전 함수를 사용하여 문장의 단어 수를 계산하십시오.
public static synchronized int find(String str){
int count=0;
boolean word= false;
char[] ch = str.toCharArray();
for(int i =0;i<ch.length;i++){
if(!(ch[i]==' ')){
for(int j=i;j<ch.length;j++,i++){
if(!(ch[j]==' ')){
word= true;
if(j==ch.length-1){
count++;
}
continue;
}
else{
if(word){
count++;
}
word = false;
}
}
}
else{
continue;
}
}
return count;
}
함수를 스레드로부터 안전하게 만들려면 아무 것도하지 않아도됩니다. 공유 리소스에 액세스하지 않습니다. (인터뷰 질문의 취지가 아니기를 바란다. 나는 당신을 위해 그것을 망치고 싶지 않기 때문이다.) 그런데, ['String.split()'] (http://docs.oracle.com /javase/7/docs/api/java/lang/String.html#split(java.lang.String)). –
이 스레드가 안전하지 않게하려면 거의 * 시도해야합니다. (지역 변수와 클래스 필드 사이의 구분을 이해하지 못하는 사람이 여기에 대해 정적 필드를 만들 수 있기 때문에 거의 말합니다.) – user2357112
이 함수가 작동하는 것 같지만 인터뷰에 실패했을 가능성이 큽니다. 코드가 불필요하게 복잡하고 버그가 발생하기 쉽습니다. 이중 루프는 잔인했으며 내부 루프가 'i'를 수정한다는 사실은 매우 혼란 스럽습니다. 'j'는 중복됩니다. 사용 중일 때마다 'i'와 같은 값을 갖습니다. 메서드를 '동기화'로 표시하는 것은 불필요했습니다. 이 모든 일은 도서관 호출로 한 줄로 해결 될 수있었습니다. – user2357112