ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java基础-线程的基本方法与代码举例

2021-08-15 02:00:57  阅读:159  来源: 互联网

标签:java Thread void t1 举例 线程 new public


线程基本方法


线程的生命周期(枚举是一种引用数据类型)

public enum State {
    NEW, //新建状态,创建了线程对象
    RUNNABLE, //(睡眠完成之后||等待事件消除转为就绪)调用start方法,就绪状态  就绪状态或者了cpu使用权,转为运行状态(枚举未有)   ;失去cpu执行权,或者调用了 yield()方法 转为 就绪状态
    BLOCKED, //阻塞状态,同步等待锁对象池  获得锁对象转为就绪状态
    WAITING, //等待状态 1)sleep()  2)join()  3)wait()
    TIMED_WAITING, //等待状态
    TERMINATED; //终止状态 1)run方法运行结束 2)调用stop方法
}

常用方法:线程睡眠-sleep()

/*线程休眠:Thread.sleep(2000)
*1)静态方法,通过类名调用
* 2)sleep()方法所在的线程睡眠
* 3)2000为毫秒
* */
public class ThreadSleep {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i=0;i<100;i++){
                    System.out.println(Thread.currentThread().getName()+i);
                    //当i为20,睡眠5秒
                    if(i==20){
                        try {
                            Thread.sleep(5000); //run()定义没有抛出异常,重写也不能抛出异常
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        });
        t1.start();
    }
}

常用方法:线程中断-interrupt()

//线程中断
public class ThreadInterrupt {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i=0;i<100;i++){
                    System.out.println(Thread.currentThread().getName()+i);
                    //当i为20,睡眠5秒
                    if(i==20){
                        try {
                            Thread.sleep(5000); //run()定义没有抛出异常,重写也不能抛出异常
                            //如果当前线程睡眠中断会产生异常
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }

            }
        });
        t1.start();
        //main线程
        for(int i=1;i<70;i++){
            System.out.println(Thread.currentThread().getName()+"----<"+i);
        }
        //当main线程结束,将t1唤醒
        t1.interrupt();
    }
    }

常用方法:线程让步-yield()

public class ThreadYield {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i=0;i<100;i++){
                    System.out.println(Thread.currentThread().getName()+1);
                    if(i%10==0){
                        Thread.yield(); //线程让步,当前线程会释放cpu执行权,转为就绪状态
                    }

                }
            }
        });
        t1.start();

        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i=0;i<100;i++){
                    System.out.println(Thread.currentThread().getName()+"---->"+1);

                }
            }
        });
        t2.start();
    }
}

常用方法:线程的加入-join();

public class ThreadJoin {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i=1;i<50;i++){
                    System.out.println(Thread.currentThread().getName()+i);
                }
            }
        });
        t1.start();
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i=1;i<50;i++){
                    System.out.println(Thread.currentThread().getName()+i);
                    if(i==20){
                        try {
                            t1.join();//当i=20,加入t1线程,当前线程转为等待状态,等t1线程执行完之后,当前线程转为就绪状态
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        });
        t2.start();
    }
}

常用方法:线程的终止

线程终止-第一种方法 stop()

Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i=0;i<100;i++){
                    System.out.println(Thread.currentThread().getName()+i);
                }
            }
        });
        t1.start();

      for(int i=0;i<20;i++){
          System.out.println(Thread.currentThread().getName()+"---->"+i);
      }
      t1.stop();//main方法结束 将t1线程终止

线程终止第二种方法:run()运行结束,在线程中设置一个标志,定期判断这个标志是否变化,标志发生变化,就退出run()方法

public class ThreadStop extends Thread {
    boolean running = true;//线程运行标志

    public void run() {
        for (int i = 0; running & i < 300; i++) {
            System.out.println(Thread.currentThread().getName() + "---" + i);
        }
    }
}
    class test10 {
        public static void main(String[] args) {
            ThreadStop t1 = new ThreadStop();
            t1.start();
            for (int i = 0; i < 100; i++) {
                System.out.println(Thread.currentThread().getName() + "main----" + i);
            }
            t1.running = false;//修改子线程的标志
        }
    }

public class  ThreadStop1 implements Runnable{
    boolean stopping = false;
    @Override
    public void run() {
        for(int i=1;i<300;i++){
            if(stopping){
                return;//结束run方法执行
            }
            System.out.println(Thread.currentThread().getName()+"----"+i);
        }
    }
}
class test11{
    public static void main(String[] args) {
        ThreadStop1 t2=new ThreadStop1();
        new Thread(t2).start();
        //main线程
        for(int i=1;i<=100;i++){
            System.out.println(Thread.currentThread().getName()+i);
        }
        t2.stopping=true;//修改实现类 的标志
    }
}

标签:java,Thread,void,t1,举例,线程,new,public
来源: https://www.cnblogs.com/nanao/p/15142471.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有