Java 면접 스레드

3761 단어 면접 시험

1,sleep()와wait()는 어떤 차이가 있습니까?【기초】


답:sleep은 스레드 클래스(Thread)의 방법으로 이 스레드가 지정한 시간을 멈추고 실행 기회를 다른 스레드에게 주지만 모니터링 상태는 그대로 유지되며 그때가 되면 자동으로 회복됩니다.sleep를 호출하면 대상 자물쇠를 풀지 않습니다.wait는 Object 클래스의 방법입니다. 이 대상에 대해wait 방법을 호출하면 본 라인은 대상 자물쇠를 포기하고 이 대상을 기다리는 대기 잠금탱크에 들어갑니다. 이 대상에게 notify 방법(또는 notify All)을 보낸 후에야 본 라인은 대상 잠금탱크에 들어가 대상 잠금을 획득하여 운행 상태에 들어갈 수 있습니다.

2. 한 라인이 한 대상에 들어가는synchronized 방법에 들어가면 다른 라인이 이 대상에 들어갈 수 있는 다른 방법이 있습니까?【기초】


답: 다른 라인은 이 대상의 다른 비동기화 방법에만 접근할 수 있고 동기화 방법은 들어갈 수 없습니다.

3. 당신이 알고 있는 라인을 동기화하는 방법을 말씀해 주세요.【기초】


답:wait(): 한 라인을 대기 상태에 놓고 소지한 대상의lock를 방출한다.sleep (): 실행 중인 라인을 수면 상태로 만드는 정적 방법입니다. 이 방법으로 InterruptedException 이상을 포착합니다.notify (): 대기 상태의 스레드를 깨웁니다. 이 방법을 호출할 때 대기 상태의 스레드를 정확하게 깨울 수 없습니다. JVM에서 어느 스레드를 깨울지, 우선순위가 아닙니다.notity All (): 대기 상태에 있는 모든 라인을 깨웁니다. 모든 라인에 대한 대상을 잠그는 것이 아니라 경쟁하도록 주의하십시오.

4. 다선정에는 몇 가지 실현 방법이 있는데 모두 무엇입니까?동기화에는 몇 가지 실현 방법이 있는데, 모두 무엇입니까?【기초】


답: 다중 루틴은 두 가지 실현 방법이 있는데 그것이 바로 Thread 클래스를 계승하는 것과 Runnable 인터페이스를 실현하는 것이다. 동기화 실현은 두 가지가 있는데 그것이 바로synchronized,wait와 notify이다.

5. 동기식과 비동기식은 어떤 차이점이 있고 어떤 상황에서 각각 그들을 사용합니까?예를 들어 설명하다.【기초】


A: 데이터가 온라인으로 공유되는 경우.예를 들어 쓰고 있는 데이터가 나중에 다른 라인에 읽히거나 읽고 있는 데이터가 다른 라인에 읽혔을 수도 있다. 그러면 이런 데이터는 공유된 데이터이기 때문에 동기화 접근을 해야 한다.응용 프로그램이 대상에서 오래 걸리는 방법을 호출하고 프로그램이 방법이 되돌아오기를 원하지 않을 때 비동기 프로그래밍을 사용해야 한다. 많은 상황에서 비동기 경로를 사용하는 것이 효율적이다.

6, 한 라인을 시작하려면run()을 사용합니까, 아니면 start()를 사용합니까?【기초】


답: 스레드를 시작하는 것은 스레드를 대표하는 가상 프로세서를 실행 가능한 상태로 만드는 start () 방법을 호출하는 것입니다. 이것은 JVM에서 스케줄링하고 실행할 수 있음을 의미합니다.이것은 결코 라인이 즉시 운행할 것이라는 것을 의미하지 않는다.run () 방법은 라인을 멈추기 위해 종료해야 하는 로고를 만들 수 있습니다.

7. 스레드의 기본 개념, 스레드의 기본 상태와 상태 간의 관계는?【기초】


답: 루틴은 프로그램 실행 과정에서 프로그램 코드를 실행할 수 있는 하나의 실행 단위를 가리키며 모든 프로그램은 적어도 하나의 루틴, 즉 프로그램 자체가 있다.자바의 스레드는 네 가지 상태가 있는데 그것이 바로 실행, 준비, 마운트, 끝이다.

8、synchronized와java를 약술합니다.util.concurrent.locks.락의 공통점과 차이점?【중난이도】


답: 주요 공통점: Lock은synchronized가 실현하는 모든 기능을 완성할 수 있다.주요 차이점: Lock은synchronized보다 더 정확한 라인 의미와 성능을 가지고 있습니다.synchronized는 자동으로 자물쇠를 풀고, Lock은 반드시 프로그래머에게 수동으로 풀어야 하며,finally에서 문장에서 풀어야 합니다.

9.java에서 몇 가지 방법으로 하나의 라인을 실현할 수 있습니까?어떤 키워드로 동기화 방법을 수식합니까?stop ()와suspend () 방법은 왜 추천하지 않습니까?【중난이도】


답: 두 가지 실현 방법이 있는데 그것이 바로 Thread 클래스를 계승하고 Runnable 인터페이스를 실현하는 것이다.synchronized 키워드로 동기화 방법 수식하기;stop () 사용을 반대하는 것은 안전하지 않기 때문이다.그것은 라인에서 가져온 모든 잠금을 해제할 뿐만 아니라, 대상이 일관되지 않은 상태에 있으면, 다른 라인은 그 상태에서 그것들을 검사하고 수정할 수 있다.결과는 진정한 문제점을 찾아내기 어렵다.suspend () 방법은 자물쇠가 사라지기 쉽다.suspend () 를 호출할 때 목표 라인은 멈추지만, 그 전에 얻은 잠금을 가지고 있습니다.이 때, 다른 어떤 라인도 잠긴 자원에 접근할 수 없습니다. '마운트된 라인이 다시 실행되지 않는 한.어떤 라인이든 목표 라인을 복구하고 잠긴 자원을 사용하려고 하면 잠금이 사라집니다.그러므로suspend () 를 사용하지 말고, 자신의 Thread 클래스에 로고를 설치하여, 라인이 움직여야 하는지 끊어야 하는지를 지적해야 한다.로고가 라인을 끊어야 한다고 지적하면wait()로 대기 상태로 설정합니다.로고가 라인을 복구해야 한다고 지적하면, notify () 로 라인을 다시 시작합니다.

10. 4개의 라인을 설계하는데 그 중에서 두 개의 라인은 매번 j에 1씩 증가하고 다른 두 개의 라인은 j에 대해 매번 1씩 감소한다.프로그램을 작성하다.【중난이도】


답: 다음 프로그램은 내부 클래스를 사용하여 라인을 실현하고 j의 증감에 대해 순서 문제를 고려하지 않습니다.
public class TestThread {
private int j;
public TestThread(int j) {this.j = j;}
private synchronized void inc(){
j++;
System.out.println(j + "--Inc--" +
Thread.currentThread().getName());
}
private synchronized void dec(){
j--;
System.out.println(j + "--Dec--" +
Thread.currentThread().getName());
}
public void run() {
(new Dec()).start();
new Thread(new Inc()).start();
(new Dec()).start();
new Thread(new Inc()).start();
}
class Dec extends Thread {
public void run() {
for(int i=0; i<100; i++){
dec();
}
}
}
class Inc implements Runnable {
public void run() {
for(int i=0; i<100; i++){

inc();
}
}
}
public static void main(String[] args) {
(new TestThread(5)).run();
}
}

좋은 웹페이지 즐겨찾기