import kotlin.concurrent.thread
fun main(){
val thread1 = ThreadClass1()
thread1.start()
// Runnable 인터페이스를 구현한 클래스는 start 메서드가 없기 때문에
// Thread 클래스의 객체를 생성하여 이를 통해 가동한다.
val thread2 = ThreadClass2()
val thread3 = Thread(thread2)
thread3.start()
thread{
for(a1 in 1..10){
println("thread 3")
}
}
}
// Thread를 상속받은 클래스 사용
class ThreadClass1 : Thread(){
override fun run() {
super.run()
for(a1 in 1..10){
println("thread1")
}
}
}
// Runnable 인터페이스를 구현한 클래스 사용
class ThreadClass2 : Runnable{
override fun run() {
for(a1 in 1..10){
println("thread2")
}
}
}
코틀린
Thread
가 자바Thread
가 크게 다른 점은 고차함수를 사용할 수 있다는 점이다.run
메서드에 들어갈 코드(쓰래드로 처리 될 코드)를 익명함수나 람다식으로 작성해서 넣어주면 해당 코드를 쓰래드로 운영해준다. start도 자동으로 호출하기 때문에 개발자가 명시적으로 호출하지 않아도 된다.
import java.io.DataInputStream
import java.io.DataOutputStream
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.ObjectInputStream
import java.io.ObjectOutputStream
import java.io.Serializable
fun main(){
// saveDataStream()
// readDataStream()
// saveObjectStream()
// readObjectStream()
}
class TestClass1(var a1:Int, var a2:Int) : Serializable{
fun printValue(){
println("a1 : $a1")
println("a2 : $a2")
}
}
// DataStream으로 쓰기
fun saveDataStream(){
val fos = FileOutputStream("data1.dat")
val dos = DataOutputStream(fos)
dos.writeInt(100)
dos.writeDouble(11.11)
dos.writeUTF("문자열1")
dos.flush()
dos.close()
fos.close()
println("쓰기 완료")
}
// DataStream으로 읽기
fun readDataStream(){
val fis = FileInputStream("data1.dat")
val dis = DataInputStream(fis)
val a1 = dis.readInt()
val a2 = dis.readDouble()
val a3 = dis.readUTF()
dis.close()
fis.close()
println("a1 : $a1")
println("a2 : $a2")
println("a3 : $a3")
}
// ObjectStream으로 쓰기
fun saveObjectStream(){
val fos = FileOutputStream("data2.dat")
val oos = ObjectOutputStream(fos)
val t1 = TestClass1(100, 200)
val t2 = TestClass1(1000, 2000)
oos.writeObject(t1)
oos.writeObject(t2)
oos.flush()
oos.close()
fos.close()
println("쓰기 완료")
}
fun readObjectStream(){
val fis = FileInputStream("data2.dat")
val ois = ObjectInputStream(fis)
val t3 = ois.readObject() as TestClass1
val t4 = ois.readObject() as TestClass1
ois.close()
fis.close()
t3.printValue()
t4.printValue()
}
자바는
try-catch
를 필수적으로 작성해야 한다면 코틀린은 써도되고 안써도 된다. 하지만 어떤 오류가 발생할지 모르기 때문에try-catch
를 사용하는 것을 권장한다.