• JAVA笔记13__创建线程/线程休眠/等待线程终止/线程中断/守护线程


    /**
     * 线程:是进程的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行,一个进程最少有一个进程(单线程程序)
     * 多线程两种实现方法:1.继承Thread类       2.实现Runnable接口
     */
    public class Main {
        public static void main(String[] args) {
            MyThread t1 = new MyThread();
            t1.start(); //启动线程
            System.out.println("main");
            System.out.println("finished.");
            MyRunnable ta = new MyRunnable();
            Thread t2 = new Thread(ta);
            t2.start();
            
        }
    }
        
    class MyThread extends Thread{
        @Override
        public void run() {
            for(int i=0;i<10;++i){
                System.out.println(new Date()+"-"+i);
            }
        }
    }
    
    class MyRunnable implements Runnable{ //推荐使用这个(可以继承其它类,第一种继承了Thread就不能继承其他的)
        @Override
        public void run() {
            for(int i=0;i<10;++i){
                System.out.println("MyRunnable"+"-"+i);
            }
        }
    }
    public class Main {
        public static void main(String[] args) {
            System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()); //输出main
            Thread t1 = new Thread(new MyRunnable(),"fish7");
    //        System.out.println(t1.getId());
            t1.setName("dining");
            System.out.println("t1线程是否活动?"+t1.isAlive());
            t1.start();
            System.out.println("t1线程是否活动?"+t1.isAlive());
        }
    }
    
    class MyRunnable implements Runnable{ //推荐使用这个(可以继承其它类,第一种继承了Thread就不能继承其他的)
        @Override
        public void run() {
            System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()); //输出main
        }
    }
    public class Main {
        /**
         * Sleep方法原理:让当前线程进入休眠状态,让出当次执行的CPU时间,但是不释放监视器的所属权
         */
        public static void main(String[] args) {
            Thread t1 = new Thread(new MyRunnable());
            t1.start();
            for(int i=0;i<10;++i){
                try {
                    System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()+"-"+i);
                    Thread.sleep(1000); //不丢失任何监视器的所属权
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
    
    class MyRunnable implements Runnable{ //推荐使用这个(可以继承其它类,第一种继承了Thread就不能继承其他的)
        @Override
        public void run() {
            for(int i=0;i<10;++i){
                try {
                    System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()+"-"+i);
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
    public class Main {
        /**
         * Join方法:等待当前线程执行终止,或指定的等待时间(毫秒,纳秒)
         */
        public static void main(String[] args) {
            Thread t1 = new Thread(new MyRunnable());
            t1.start();
            for(int i=0;i<10;++i){
                try {
                    System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()+"-"+i);
                    if(i==5)
                        t1.join(); //等待该线程结束
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
    
    class MyRunnable implements Runnable{ //推荐使用这个(可以继承其它类,第一种继承了Thread就不能继承其他的)
        @Override
        public void run() {
            for(int i=0;i<10;++i){
                try {
                    System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()+"-"+i);
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
    public class Main {
        /**
         * interrup方法:只是设置了线程的中断状态为true,并没有真正地中断线程。
         */
        public static void main(String[] args) {
            Thread t1 = new Thread(new MyRunnable());
            t1.start();
            for(int i=0;i<10;++i){
                try {
                    System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()+"-"+i);
                    if(i==5)
                        t1.interrupt(); //中断线程,设置了一个中断标记(中断状态为true)
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
    
    class MyRunnable implements Runnable{
        @Override
        public void run() {
            int i = 0;
            while(!Thread.interrupted()){
                try {
                    System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()+"-"+i);
                    ++i;
                    Thread.sleep(1000); //如果中断标记为true,会抛出异常
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                    Thread.currentThread().interrupt();
                }
            }
        }
    }
    public class Main {
        /**
         * 自定义标记完成中断线程   *被中断的程序只能自己去中断,别人不得中断它。
         */
        public static void main(String[] args) {
            MyRunnable my = new MyRunnable();
            Thread t1 = new Thread(my);
            t1.setPriority(Thread.MAX_PRIORITY); //设置线程的
            Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
            t1.start(); 
            for(int i=0;i<10;++i){
                try {
                    System.out.println("当前运行的线程名称:"+Thread.currentThread().getName()+"-"+i);
                    if(i==5){
                        my.setFlag(false); //中断线程
                    }
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
    
    class MyRunnable implements Runnable{
        private boolean flag = true;
        public boolean isFlag(){
            return flag;
        }
        public void setFlag(boolean flag){
            this.flag = flag;
        }
        @Override
        public void run() {
            int i = 0;
            while(flag){
                System.out.println(Thread.currentThread().getName()+"-"+i);
                i++;
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
    public class Main {
        /**
         * 守护线程:当程序中没有用户线程的时候所有守护线程都会自动终止!(守护用户线程)
         * setDaemon:将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java虚拟机退出。
         *            该方法必须在启动线程前调用。
         * yield:暂停当前正在执行的线程对象,并执行其他线程。
         */
        public static void main(String[] args) { //主线程是用户线程
            MyRunnable my = new MyRunnable();
            Thread t1 = new Thread(my);
            t1.setDaemon(true); //设置线程为守护线程
            System.out.println(t1.isDaemon());
            t1.start(); 
            for(int i=0;i<10;++i){
                System.out.println("main-"+i);
                if(i==5){
                    Thread.yield(); //让出当次CPU的执行时间
                }
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
    
    class MyRunnable implements Runnable{
        @Override
        public void run() {
            for(int i=0;i<20;++i){
                System.out.println("MyRunnablei"+i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
  • 相关阅读:
    React项目升级遇到的问题复盘(2019-09-02)
    前端项目升级到React-router5中遇到的问题解决方案以及思路
    三行Jquery代码实现简单的选项卡
    开放-封闭原则
    单一职责原则
    简单工厂模式(c++实现)
    博客园使用MarkDown格式记录博客
    Qml 的Image对应的source不变,但是图片内容改变却不会刷新的解决方案
    Qt中第一请求web api连接返回缓慢问题
    Qt的pro文件工程配置
  • 原文地址:https://www.cnblogs.com/fish7/p/4165446.html
Copyright © 2020-2023  润新知