Selain itu, berbanding dengan benang, selain daripada warisan, bagaimanakah kebebasan kod dan data dicerminkan dalam runnable? Seperti yang ditulis pada beberapa blog, thread tidak boleh berkongsi sumber, tetapi runnable boleh berkongsi sumber Bukankah cukup untuk menukar pembolehubah dalam thread kepada statik? Sama seperti apa yang dikatakan artikel berikut http://blog.csdn.net/uudou/ar...
Nampaknya ia tidak banyak kaitan dengan data saya rasa Runnable mempunyai dua faedah:
Selepas melaksanakan Runnable, anda boleh membuka thread untuk dijalankan (biasanya menggunakan
);executorService.exec(command)
,挫一点也可以用new Thread(command).start()
),也可以不开线程阻塞式的跑(直接调用command.run()
Runnable
的好处是各种场景都可以用,比如你可以让任何一个Class implements Runnable
,但是extends Thread
Terdapat beberapa batasan kerana warisan tunggal Java, ia tidak boleh digunakan dalam beberapa senario.Jawapan:
Masalah ini dianggap masalah reka bentuk.
Sebab mengapa Thread dan Runnable dipisahkan adalah untuk memisahkan sepenuhnya "proses penciptaan" thread daripada "logic pelaksanaan" thread.
Dalam erti kata lain:
Proses penciptaan thread ialah "kod";
Logik pelaksanaan thread ialah "data"
Ini kedengaran agak mengelirukan, bukankah semuanya kod JAVA? Mengapa kod menjadi data semula?
Kami tidak terjerat dalam konsep ini, saya fikir kita boleh memikirkan isu ini secara terbalik dan memberi contoh untuk menggambarkan masalah.
Proses perbincangan:
Sebagai contoh, saya ingin mereka bentuk program single-thread ini perlu menyelesaikan dua tugasan:
1. Cetak ayat hello world
Nota: Apakah pelaksanaan 1? Atau 2? Ia ditentukan oleh parameter n, n ialah nombor rawak...2. Kira jumlah dua nombor int a dan int b dan keluarkan;
1. Cetak ayat hello
Perbincangan ini tamat, mari kita amati dengan teliti...Sebenarnya:2
Perhatikan bahawa pada masa ini kita perlu mengubah suai proses penciptaan Thread, iaitu mengubah suai fungsi mula:
Ringkasan:
1. Tujuan menggunakan antara muka Runnable adalah untuk memisahkan sepenuhnya "proses penciptaan" daripada "logik pelaksanaan" thread
Baiklah, di atas adalah jawapan saya untuk soalan ini, saya harap ia akan membantu anda.2 ;
3 Dalam Semasa perbincangan, kami beralih dari konkrit kepada abstrak
4 Kod yang saya berikan dalam contoh ini memang agak mudah, tetapi saya harap ia dapat menjelaskan masalahnya dengan jelas;