线程基础

一、进程和线程区别:

进程就是系统中最小执行单元。

线程是进程中最小执行单元

进程中执行的功能通过线程来实现

多个线程共享一个进程中所有资源(PC寄存器,上下文,本地栈)

单进程单线程-> 一人在一个桌子上面吃饭

单进程多线程-> 多个人在一个桌子上面吃饭

多进程多线程-> 每一个人在各自的桌子上面吃饭

-- 由系统调度器调度

-- 线程运行方式:

程序->创建一个线程->start->runnable

系统调度就行状态的中线程->running

-- java中怎么创建线程

Thread

Runnable

 

 无线程

package com.nothread.demo;

public class NoThreadDemo {
    
    public static void main(String[] args) {
        // 默认主线程中的执行顺序是从上而下执行的
        MyClass cl = new MyClass();
        cl.run1();
        cl.run2();
    }

    private static class MyClass {
        public void run1() {
            while (true) {
                System.out.println("第一条通道可以到目的地");
            }
        }

        public void run2() {
            while (true) {
                System.out.println("第二条通道可以到目的地");
            }
        }
    }
}

继承Thread

package com.thread.demo;

/**
 * 使用线程
 * 
 * @author Administrator
 *
 */
public class TestThreadDemo {
    public static void main(String[] args) {
        System.out.println("main thread started");
        // 创建2个线程
        GameThread game = new GameThread();
        VoiceThread voice = new VoiceThread();
        // 启动线程 start 
        game.start();
        voice.start();
        // 停止(太暴力终止过程中会出现数据错误问提)
        try {
            game.join();
            voice.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        System.out.println("main thread ended~~");
    }
    
    /**
     * 游戏线程类
     * @author Administrator
     *
     */
    private static class GameThread extends Thread {
        @Override
        public void run() {
            for (int i = 0; i <10; i++) {
                System.out.println("执行打游戏");
            }
        }
    }
    
    /**
     * 开黑线程类
     * @author Administrator
     *
     */
    private static class VoiceThread extends Thread {
        @Override
        public void run() {
            for (int i = 0; i <10; i++) {
                System.out.println("执行语言通话");
            }
        }
    }
}

 实现Runnable方式

package com.thread.demo;

public class TestThreadDemo1 {
    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName());
        Thread t1 = new Thread(new MyRunnable(), "AAAA");
        Thread t2 = new Thread(new MyRunnable(), "BBBB");
        t1.start();
        t2.start();
    }
    
    private static class MyRunnable implements Runnable {
        @Override
        public void run() {
            for (int i = 0; i < 10; i ++) {
                System.out.println(Thread.currentThread().getName()+"执行Runnable接口");
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"执行Runnable接口");
            }
        }
        
    }
}

线程状态

package com.thread.demo;

public class ThreadStateDemo {

    public static void main(String[] args) {
        StateThread st = new StateThread("AAAA");
        st.start();
        try {
            st.join(20000000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("main end~");
    }
    
    private static class StateThread extends Thread {
        
        public StateThread(String name) {
            super(name);
        }
        
        @Override
        public void run() {
            for (int i = 0 ; i < 10; i++) {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("执行线程内容");
            }
        }
    }
}

 jps

jstck

线程状态参考https://www.cnblogs.com/aspirant/p/8900276.html

posted @ 2019-03-13 21:30  ^sun^  阅读(184)  评论(0编辑  收藏  举报