線程同步總結

 *    進程:
 *        正在運行的程序,是系統進行資源分配和調用的獨立單位。
 *        每個進程都有它本身的內存空間和系統資源。
 *    線程:
 *        是進程中的單個順序控制流,是一條執行路徑
 *        一個進程若是隻有一條執行路徑,則稱爲單線程程序。
 *        一個進程若是有多條執行路徑,則稱爲多線程程序。java

2種方式啓動多線程面試

 * 方式1:繼承Thread類。
 * 步驟
 *         A:自定義類MyThread繼承Thread類。
 *         B:MyThread類裏面重寫run()?
 *             爲何是run()方法呢?
 *         C:建立對象
 *         D:啓動線程多線程

         MyThread my = new MyThread();
         // 啓動線程
//         my.run();
//         my.run();
        // 調用run()方法爲何是單線程的呢?
        // 由於run()方法直接調用其實就至關於普通的方法調用,因此你看到的是單線程的效果
        // 要想看到多線程的效果,就必須說說另外一個方法:start()
        // 面試題:run()和start()的區別?
        // run():僅僅是封裝被線程執行的代碼,直接調用是普通方法
        // start():首先啓動了線程,而後再由jvm去調用該線程的run()方法。
        // MyThread my = new MyThread();
        // my.start();
        // // IllegalThreadStateException:非法的線程狀態異常
        // // 爲何呢?由於這個至關因而my線程被調用了兩次。而不是兩個線程啓動。
        // my.start();

        // 建立兩個線程對象
        MyThread my1 = new MyThread();
        MyThread my2 = new MyThread();

        my1.start();
        my2.start();
/*
 * 該類要重寫run()方法,爲何呢?
 * 不是類中的全部代碼都須要被線程執行的。
 * 而這個時候,爲了區分哪些代碼可以被線程執行,java提供了Thread類中的run()用來包含那些被線程執行的代碼。
 */
public class MyThread extends Thread {

    @Override
    public void run() {
        // 本身寫代碼
        // System.out.println("好好學習,每天向上");
        // 通常來講,被線程執行的代碼確定是比較耗時的。因此咱們用循環改進
        for (int x = 0; x < 200; x++) {
            System.out.println(x);
        }
    }

用對象設置名稱jvm

  • 方法1
        MyThread my1 = new MyThread("林青霞");
        MyThread my2 = new MyThread("劉意");
  • 方法2
         MyThread my1 = new MyThread();
         MyThread my2 = new MyThread();
//    //調用方法設置名稱
         my1.setName("林青霞");
         my2.setName("劉意");

    thread中的方法ide

public class MyThread extends Thread {

    public MyThread() {
    }
    
    public MyThread(String name){
        super(name);
    }

@Override
public void run() { for (int x = 0; x < 100; x++) { System.out.println(Thread.currentThread().getName() + ":" + x); } } }

第二種方式學習

MyRunnable my = new MyRunnable();

        // 建立Thread類的對象,並把C步驟的對象做爲構造參數傳遞
        // Thread(Runnable target)
        // Thread t1 = new Thread(my);
        // Thread t2 = new Thread(my);
        // t1.setName("林青霞");
        // t2.setName("劉意");

        // Thread(Runnable target, String name)
        Thread t1 = new Thread(my, "林青霞");
        Thread t2 = new Thread(my, "劉意");

接口類爲spa

public class MyRunnable implements Runnable {

    @Override
    public void run() {
        for (int x = 0; x < 100; x++) {
            // 因爲實現接口的方式就不能直接使用Thread類的方法了,可是能夠間接的使用
            System.out.println(Thread.currentThread().getName() + ":" + x);
        }
    }

}
相關文章
相關標籤/搜索