java 线程 (一) Thread

 

package cn.sasa.demo1;

public class Test {
    public static void main(String[] args) throws InterruptedException {
        /**
         * 进程:
         * 进程指正在运行的程序。当一个程序进入内存运行,即变成一个进程
         * 进程是处于运行过程中的程序,并具有一定独立功能
         * 
         * 线程:
         * 线程是进程中的一个执行单元,负责当前进程中程序的执行
         * 一个进程至少有一个线程,一个进程可以有多个线程
         * 
         * 线程的运行模式:
         * a、分时调度
         *     所有线程 轮流使用 CPU的使用特权,平均分配每个线程占用CPU 的时间
         *     
         * b、抢占式调度
         *     优先让 优先级高的线程使用CPU, 如果线程的优先级相同,那么就随机选择一个(线程的随机性)
         *     java使用抢占式调度
         *     
         * 对于CPU的一个核而言,某个时刻,只能执行一个线程,
         * 多线程程序并不能提高程序的运行速度,但能提高程序运行效率,让CPU的使用率更高
         * 
         * 创建线程的目的:
         * 建立程序单独运行的执行路径,让多部分代码实现同时执行。
         * 
         * 创建新执行线程有两种方法:
         * a、声明Thread的子类,重写run方法。创建对象,开启线程。run相当于其他线程中的main方法
         * b、声明Runnable接口的实现类,实现run方法。
         * 
         * public class Thread implements Runnable {...}
         * 
         * public interface Runnable {
         *         public abstract void run();
         * }
         * 
         * 为什么调用Thread的start方法 而不是直接调用 run方法
         * run方法不开启线程,只是调用对象的方法
         * start开启线程,并让JVM调用run方法在开启的线程中执行
         * 
         * 
         * 
         */
        
        //Thread子类创建线程
        MyThread th1 = new MyThread();
        th1.setName("线程名字");//修改名字要在start之前,一般不需要修改
        th1.start();
        th1.getName();
        
        //Runnable接口的方式
        //一般用这种方式,将执行的任务分离出来
        Thread th3 = new Thread(new MyRunnable());
        th3.start();
        
        //currentThread 当前执行的线程
        System.out.println(Thread.currentThread().getName());
        
        //使用匿名内部类,实现多线程
        //方式一:继承
        //方式二:实现接口
        new Thread() {
            public void run() {
                System.out.println("lalalala");
            }
        }.start();
        
        
        new Thread(new Runnable() {
            public void run() {
                System.out.println("hahaha");
            }
        }).start();
        
        for(int i=0; i<5; i++) {
            //sleep 休眠多少毫秒
            Thread.sleep(1000);
            System.out.println(i);
        }
        
    }
}

 

package cn.sasa.demo1;

public class MyThread extends Thread{
    public void run() {
        System.out.println(getName());
        for(int i=0;i<60;i++) {
            System.out.println("thread1-----run"+i);
        }
        
    }
    
//    public MyThread() {
//        super("线程的名字1");
//    }
}

 

package cn.sasa.demo1;

public class MyRunnable implements Runnable{

    @Override
    public void run() {
        for(int i = 0; i<60; i++) {
            System.out.println("runnable......"+i);
        }
    }

}

 

posted @ 2018-12-27 14:27  SasaL  Views(159)  Comments(0Edit  收藏  举报