2017-04-01 1 views
1

어떻게 이름을 Thread으로 지정할 수 있습니까?스레드의 이름을 지정하는 방법은 무엇입니까?

override val t: Thread = Thread { 
     try { 
      transmit() 
     } catch (e: Exception) { 
      println("Transmitter throws exception: $e") 
     } 
    } 
+1

스레드를 가지고 당신은 개체 식을 사용하여 Thread 클래스를 서브 클래 싱 할 필요가 setName 메소드가 있다면, 그 코드를 시도해 볼까요? – aldok

+0

@aldok이 코드 내에서 어떻게 스레드에 액세스 할 수 있습니까? 그래서 setname을 호출 할 수 있습니까? – ycomp

답변

8

할 수 있습니다 stdlib에서 thread 기능을 사용하여 명명 된 스레드 생성 :

fun thread(
    start: Boolean = true, 
    isDaemon: Boolean = false, 
    contextClassLoader: ClassLoader? = null, 
    name: String? = null, 
    priority: Int = -1, 
    block:() -> Unit 
): Thread 

그냥 코드를 변경을 : 스레드 내에서 스레드의 이름을 설정하기 위해

override val t: Thread = thread(name = "transmitter thread") { 
     try { 
      transmit() 
     } catch (e: Exception) { 
      println("Transmitter throws exception: $e") 
     } 
    } 

Runnable을받는 Thread의 생성자를 사용할 수 없습니다. 인수가 정렬 방법에 의한 있지만,이 작업을 수행해야합니다,

val thread = object : Thread() { 
    override fun run() { 
     name = "thread with random name: ${Math.random()}" 
    } 
} 
+0

'Runnable을받는 Thread의 생성자를 사용할 수 없습니까? Why is it? –

+2

람다는'Runnable' 인스턴스를 나타내므로'Thread' 인스턴스가 아닙니다. 따라서 언어 관점에서 볼 때 스레드가없고'Runnable '이기 때문에 스레드 이름을 내부에 설정할 수 없습니다. –

+0

저는 조금 혼란 스럽습니다. 제 코드에 대한 acepted (다른 대답)가 가장 쉽습니다. 그러나 제 코드는 이제 약간의 메쉬가되었으므로 테스트를 위해 실행할 수 없습니다. 그것들은 작동하지 않을 것이라고 말하는 사람들? – ycomp

2

당신은 스레드의 생성자를 사용할 수 있습니다 :

override val t: Thread = Thread({ 
    try { 
     transmit() 
    } catch (e: Exception) { 
     println("Transmitter throws exception: $e") 
    }}, "Your name here") 
} 
관련 문제