modul 13 treads

Upload: alexsanderz-frei

Post on 09-Feb-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/22/2019 Modul 13 Treads

    1/6

    MODUL 13

    Threads

    2 x pertemuan (Pertemuan 13 ,14)

    Penjelasan Sin!at

    Sebuah thread, secara definisi adalah sebuah proses ringan. Mereka digunakan

    untuk meningkatkan fungsionalitas dan performansi dengan cara melakukan beberapa

    tugas pada saat yang sama, yaitu bersamaan. Ada dua metode untuk menerapkan thread

    di dalam Java :

    1. penerapan sebuah antarmuka

    2. perpanangan sebuah class

    !hread merupakan pemrograman Java tingkat menengah, untuk itu mahasis"a

    diharapkan sudah mengenal dengan konsep#konsep dasar $bect $riented %aradigm

    dan mengerti dengan istilah seperti &e'tending&, &interface& dan &class&. Alasan mengapa

    ada dua cara membuat thread. (ail )ni dikarenakan ika sebuah class sudah menadi

    sebuah class turunan dari beberapa class selain &!hread&, maka ini tidak dapat

    memperpanang &!hread& karena beberapa turunan tidak diperbolehkan di dalam

    pemrograman bahasa Java. Jadi, dalam kasus seperti itu kita gunakan antarmuka

    &*unnable& sebagai gantinya.

    "ara mem#uat thread.

    Metode pertama adalah memperpanang atau menurunkan class &!hread&. +lass &!hread&

    didefinisikan di dalam paket ava.lang, dimana perlu diimpor. %erhatikan kode diba"ah

    untuk mendapat ide yang lebih baik :

    import ava.lang.-

    public class my'ample e'tends !hread

    /

    public void run0

    /

    ....

    34

  • 7/22/2019 Modul 13 Treads

    2/6

    +ara yang lain untuk melakukan hal ini dengan cara menerapkan &*unnable&, seperti

    terlihat diba"ah,

    import ava.lang.-

    public class my'ample implements *unnable

    /!hread !-

    public void run0

    /

    ....

    %erhatikan pada kedua metode menggunaan fungsi &run0&, dimana bertanggung

    a"ab pada kera thread. Antarmuka &*unnable& sebenarnya bukan apa#apa tetapi

    sebuah class yang berisi hanya satu metode abstrak, &public abstract void run0-&. 5ang

    perlu diingat adalah bah"a sebuah antarmuka hanya menyediakan sebuah rancangan

    frame"ork atas class yang dapat diterapkan. )ni uga menarik untuk dicatat bah"a

    sebenarnya class &!hread& uga menerapkan antarmuka &*unnable&.

    Menciptakan !hread :

    !hread thread 6 ne" !hread0-thread.start0-

    %ada kode !hread diatas tidak melakukan sesuatu apapun yg berguna, agar !hread tsb

    bisa berguna maka dibutuhkanmethod run0,ada 7 buah cara tuk menciptakan !hread

    dgn method run0 #nya.

    Pra!ti!

    P$%&T'& 1

    1. Meng#'tends class !hread

    public class My!hread e'tends !hread/public void run0/

    88buat suatu pekeraan disini, misal print sesuatu ke console

    System.out.println09Tread yang pertama");

    88untuk menciptakan & menjalankan MyThread dilakukan dengan kodeprogram berikut:

    public static void main0String; args/!hread my!hread 6 ne" My!hread0-

    my!hread.start0-

    3

  • 7/22/2019 Modul 13 Treads

    3/6

    P$%&T'& 2

    2. Meng#implementasi interface *unnable

    =adang kita tidak mau membuat class sendiri untuk !hread,melainkan

    menginginkan !hread itu beralan di class yg membutuhkan !hread, disini kita bisa

    menggunakan *unnable interface.

    public class My+lass e'tends +lass5ang>ain?odoAmatApaan implements *unnable/

    public My+lass0/

    !hread thread 6 ne" !hread0this-thread.start0-

    public void run0/88buat suatu pekeraan disini, misal print sesuatu ke console

    System.out.println09asiik gua dialanin duluan9-

    88tuk menalankan My+lass di main method gak perlu lg ciptakan !hread dgn methodstart0 krn di constructor sudah ada

    public static void main0String; args/

    ne" My+lass 0-

    P$%&T'& 3

    3 Denan menuna!an %nn*mus 'nner "lasses

    =adang kita tidak ingin menciptakan class untuk !hread dan kondisinya tidak

    cocok untuk pake interface *unnable. Jika hal tersebut teradi, maka kita bias membuatanonymous inner class, spt ini:

    public class My+lass/public My+lass0/

    ne" !hread0/

    public void run0/88buat suatu pekeraan disini, misal print sesuatu ke console

    System.out.println09asiik gua dialanin duluan9-

    .start0-

    88tuk menalankan My+lass di main method gak perlu lg ciptakan !hread dgn method

    start0 krn di constructor sudah adapublic static void main0String; args/

    ne" My+lass 0-

    @

  • 7/22/2019 Modul 13 Treads

    4/6

    P$%&T'& 4

    =etik dan alankan program diba"ah ini kemudian amati hasilnya.

    public class !esting!hread implements *unnable /

    private boolean sleeping-

    public !esting!hread /

    public void start0 /

    !hread t 6 ne" !hread0this-

    t.start0-

    public void stop0 /

    sleeping 6 true-

    public void run0 / "hile0Bsleeping /

    System.out.println09!hread sedang beralan9-

    try /

    !hread.sleep01- catch0)nterrupted'ception ie /

    public static void main0String; args / !esting!hread test 6 ne" !esting!hread0-

    test.start0-

    4 Latihan

    pembuatan contoh suatu progress dengan memanfaatkan class S"ingCorker :

    88 +lass +ounter!ask.avaimport ava'.s"ing.J!e'tArea-

    import ava'.s"ing.S"ingCorker-

    public class +ounter!ask e'tends S"ingCorkerD)nteger, )ntegerE /

    private static final int F>A5 6 1-

    private J!e'tArea te'tArea-

    88 A calling application must pass a J!e'tArea

    public +ounter!ask0J!e'tArea te'tArea /

    this.te'tArea 6 te'tArea-

    G$verrideprotected )nteger do)n?ackground0 thro"s 'ception /

    int i 6 -

    int count 6 1-

    "hile 0B is+ancelled0 HH i D count /

    @1

  • 7/22/2019 Modul 13 Treads

    5/6

    iII-

    publish0ne" )nteger; /i-set%rogress0count i 8 count-

    !hread.sleep0F>A5-

    process0i-

    return count-

    protected void process0)nteger... chunks /

    for 0int i : chunkste'tArea.append0i I 9n9-

    G$verrideprotected void done0 /

    if 0is+ancelled0te'tArea.append09+ancelled B9-

    else

    te'tArea.append09Fone B9-

    88 class S"ingCorkerFemo.ava

    import ava.a"t.>ayoutManager-import ava.a"t.event.Actionvent-

    import ava.a"t.event.Action>istener-

    import ava.beans.%roperty+hangevent-import ava.beans.%roperty+hange>istener-

    import ava'.s"ing.?o'>ayout-

    import ava'.s"ing.J?utton-

    import ava'.s"ing.Jrame-import ava'.s"ing.J%anel-

    import ava'.s"ing.J%rogress?ar-

    import ava'.s"ing.JScroll%ane-import ava'.s"ing.J!e'tArea-

    import ava'.s"ing.S"ingKtilities-

    public class S"ingCorkerFemo /

    private static void constructLK)0 /

    88 !e't area that displays results

    J!e'tArea te'tArea 6 ne" J!e'tArea01, 2-

    88 %rogress bar displaying the progress of the

    88 time#consuming taskfinal J%rogress?ar progress?ar 6 ne" J%rogress?ar0, 1-

    final +ounter!ask task 6 ne" +ounter!ask0te'tArea-task.add%roperty+hange>istener0ne" %roperty+hange>istener0 /

    public void property+hange0%roperty+hangevent evt /

    if 09progress9.euals0evt.get%ropertyName0 /progress?ar.setOalue00)ntegerevt.getNe"Oalue0-

    -

    @2

  • 7/22/2019 Modul 13 Treads

    6/6

    88 Start button

    J?utton start?utton 6 ne" J?utton09Start9-start?utton.addAction>istener0ne" Action>istener0 /

    public void action%erformed0Actionvent e /

    task.e'ecute0-

    -

    88 +ancel button

    J?utton cancel?utton 6 ne" J?utton09+ancel9-

    cancel?utton.addAction>istener0ne" Action>istener0 /

    public void action%erformed0Actionvent e /task.cancel0true-

    -

    J%anel button%anel 6 ne" J%anel0-

    button%anel.add0start?utton-button%anel.add0cancel?utton-

    J%anel cp 6 ne" J%anel0->ayoutManager layout 6 ne" ?o'>ayout0cp, ?o'>ayout.5PAQ)S-

    cp.set>ayout0layout-

    cp.add0button%anel-

    cp.add0ne" JScroll%ane0te'tArea-cp.add0progress?ar-

    Jrame frame 6 ne" Jrame09S"ingCorker Femo9-frame.setFefault+lose$peration0Jrame.Q)!P$NP+>$S-

    frame.set+ontent%ane0cp-

    frame.pack0-frame.set>ocation*elative!o0null-

    frame.setOisible0true-

    public static void main0String; args /

    S"ingKtilities.invoke>ater0ne" *unnable0 /

    public void run0 /constructLK)0-

    -

    # amati dan buatlah kesimpulan dari program diatas, sertakan dalam listing

    + TU%S

    Fiberikan oleh dosen pengampu praktikum

    @7