Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2장 RxJava를 사용하는 데 필요한 배경 지식 #5

Open
lee-ji-hoon opened this issue Apr 22, 2023 · 2 comments
Open

2장 RxJava를 사용하는 데 필요한 배경 지식 #5

lee-ji-hoon opened this issue Apr 22, 2023 · 2 comments

Comments

@lee-ji-hoon
Copy link
Member

No description provided.

@lee-ji-hoon
Copy link
Member Author

2-13의 예제에서 동시성 문제가 생길 수 있다고 돼있는데 어떻게 해야 저 경우를 재현할 수 있을까?

class Point {

    private val x = AtomicInteger(0)
    private val y = AtomicInteger(0)

    fun rightUp() {
        repeat(1000) {
            x.incrementAndGet()
        }
        repeat(1000) {
            y.incrementAndGet()
        }
    }

    fun getX() = x.get()

    fun getY() = y.get()
}
  • x가 update되는 중간에 rightUp 함수에 다른 thraed가 접근한다.
  • 그럼 변경된 x값과 변경되지 않은 y값을 갖고 가게 된다.

라고 책에는 적혀져 있는데 이렇게 해도 결국에는 동일한 값을 출력하게 되던데 어떻게 해야 할까 🤔

fun main() {

    val point = Point()

    val task = Runnable {
        for (i in 0..9999) {
            point.rightUp()
        }
    }

    val executorService = Executors.newCachedThreadPool()

    val future1 = executorService.submit(task, true)
    val future2 = executorService.submit(task, true)
    val future3 = executorService.submit(task, true)
    val future4 = executorService.submit(task, true)
    val future5 = executorService.submit(task, true)
    val future6 = executorService.submit(task, true)

    if (future1.get() && future2.get() && future3.get() && future4.get() && future5.get() && future6.get()) {
        println("${point.getX()},${point.getY()}")
    } else {
        println("실패")
    }

    executorService.shutdown()
}

@audxo112
Copy link
Contributor

audxo112 commented Apr 29, 2023

혹시 몰라 자바로도 테스트 해봤는데 20000, 20000

추가로
java는 패키지 파일이 kotlin 폴더 안에 있으면 ClassNotFound 로 아예 찾질 못해서 실행을 못하네

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants