kotlin.concurrent.thread{ println( "Hello" ) }
Thread{ println( "hello" ) }.start()
Thread( object: Runnable {
override fun run() {
println( "hello" )
}
}).start()
fun main( args: Array<String> ) {
val runner = RunnableImpl()
val thread = Thread( runner )
thread.start()
}
class RunnableImpl : Runnable
{
override fun run() {
println( "hello" )
}
}
import kotlin.concurrent.*
fun main( args: Array<String> ) {
Synchronized2().exec()
}
class Synchronized2 {
fun exec() {
val lock = Any()
repeat( 10 ) {
thread{ run( lock ) }
}
repeat( 10 ) {
Thread{ run2( it ) }.start()
}
}
private fun run( lock: Any ) {
synchronized( lock ) {
print( '<')
Thread.sleep( 500 )
print( '>')
}
}
@Synchronized run2( id: Int ) {
print( "<(${id})")
Thread.sleep( 500 )
print( '>')
}
}
import java.util.concurrent.locks.*
import kotlin.concurrent.*
fun main( args: Array<String> ) {
Lock2().exec()
}
class Lock2 {
fun exec() {
val lock = ReentrantLock()
repeat( 10 ) {
thread{ run( lock ) }
}
}
private fun run( lock: Lock ) {
lock.withLock {
print( '<' )
Thread.sleep( 500 )
print( '>' )
}
}
}
import java.util.*
import java.util.concurrent.locks.*
import kotlin.concurrent.*
fun main( args: Array<String> ) {
val lock = ReentrantReadWriteLock()
val task1 = ReadWriteLock2( "task1", lock )
val task2 = ReadWriteLock2( "task2", lock )
val task3 = ReadWriteLock2( "task3", lock )
thread{ task1.read() }
thread{ task2.read() }
thread{ task3.write() }
thread{ task1.read() }
thread{ task2.write() }
thread{ task3.write() }
}
class ReadWriteLock2( val name: String, val lock: ReentrantReadWriteLock ) {
fun read() {
lock.read {
println( "$name: read -->" )
Thread.sleep( 500 )
println( "$name: read <--" )
}
}
fun write() {
lock.write {
println( "$name: write -->" )
Thread.sleep( 500 )
println( "$name: write <--" )
}
}
}
(結果)
task1: read -->
task2: read -->
task2: read <--
task1: read <--
task3: write -->
task3: write <--
task1: read -->
task1: read <--
task2: write -->
task2: write <--
task3: write -->
task3: write <--
import kotlin.concurrent.*
fun main( args: Array<String> ) {
var cnt = 0
val timer2 = timer( daemon = true, initialDelay = 1000, period = 500 ) {
println( "Hello" )
cnt += 1
if( cnt == 5 ) {
cancel()
}
}
for( ii in 1..100 ) {
Thread.sleep( 100 )
if( cnt == 5 ) {
timer2.cancel()
break
}
}
}