进程和线程

一、两者的关系

进程:应用程序的执行实例,有独立的内存空间和系统资源。

线程:CPU调度和分派的基本单位,进程中执行运算的最小单位,真正在CPU上执行的是线程。

二、创建线程的两种方式(都需要重写run()方法)

方法一:继承java.lang.Thread类

1.创建线程类继承Thread类

package com.yh.myThread;

public class ThreadDemo extends Thread {
    private int num = 0;

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println(num++);
    }
}

2.测试类

package com.yh.myThread;

public class Test {
    public static void main(String[] args) {
        
        ThreadDemo thread = new ThreadDemo();
        thread.start();

    }
}

运行结果:0

方法二:是西安java.lang.Runnable接口

多个线程如果是通过同一个Runable对象构造的,那么会共享Runable对象的资源。

1.创建线程类实现Runnable接口,并重写run()方法;

package com.yh.myThread;

public class RunnableDemo implements Runnable {
    private int num = 0;

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.print(num++);
    }
}

2.测试类

创建两个线程类对象,但是用同一个Runnable类对象

package com.yh.myThread;

public class Test {
    public static void main(String[] args) {
        RunnableDemo runnable = new RunnableDemo();
        Thread thread1 = new Thread(runnable);
        thread1.start();
        
        Thread thread2 = new Thread(runnable);
        thread2.start();
    }
}

运行结果:0 1,注:顺序可能不同

3.两种方法的区别

a.通过实现接口的方式可以再继承别的类;

b.创建对象方式不同,使用实现Runnable接口方法,不同的线程对象使用同一个Runnable对象可以共享数据。

 

三、线程的状态

新生状态、可运行状态、阻塞状态、死亡状态

 

四、线程的调度

1.优先级:反应线程的重要或紧急程度,通过1-10表示,10的优先级最高,默认值是5。

更改优先级:myThread.setPriority(3);

2.线程调度的方法

join():将指定线程加入到当前线程

代码示例:

package com.yh.myThread;

public class RunnableDemo implements Runnable {
    private int num = 0;
    ThreadDemo thread = new ThreadDemo();

    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(num<10) {
            if(num==4) {
                thread.start();
                try {
                    thread.join();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            System.out.print(num+++" ");
        }
    }
}

运行结果:0 1 2 3 a b c d e 4 5 6 7 8 9 

Thread.sleep():将当前线程阻塞指定的毫秒数

Thread.yield():暂停当前正在执行的线程,把执行机会让给相同或更高优先级的线程

 

五、线程同步

当两个或多个线程需要访问同一资源时,需要确保该资源某一时刻只能被一个线程使用。

通过同步代码块或代码实现,使用关键字synchronized。

posted @ 2019-04-27 16:03  想看云飞却没风~  阅读(191)  评论(0编辑  收藏  举报