zoukankan      html  css  js  c++  java
  • 线程的常用方法

    开发中用到的线程方法也是很常见的,其方法的区别理解清楚了,操作也就顺手了。线程中的常用的方法有如下几个,分别是sleep(),wait()和notify()和notifyAll()、suspend()和resume()、yield()、join()、interrupt()。下面我就以上方法做一个简单的介绍。首先是join()方法,该方法里面的参数是一个毫秒值,表示等待几秒执行该操作。它的主要作用就是同步,由线程的并行转换为串行。通俗的说就是停止当前的线程,让使用join的线程先执行完毕,再执行其它线程。代码如下:

    线程任务类:

    package cn.test;
    
    public class TaskMy implements Runnable{
    
        @Override
        public void run() {
            for(int i=0;i<20;i++) {
                System.out.println(Thread.currentThread().getName()+"====="+i);
            }
        }
    }

    创建线程并执行线程:

    package cn.test;
    
    public class DemoMain {
        public static void main(String[] args) throws InterruptedException {
    
    //        创建对象
            TaskMy task = new TaskMy();
            TaskMy task2 = new TaskMy();
            
    //        创建线程对象
            Thread t1 = new Thread(task, "线程1");
            Thread t2 = new Thread(task2, "线程2");
            
    //        启动线程
            t1.start();
            
    //        暂停其它线程,让t1执行完再执行其它线程
            t1.join();
            
            t2.start();
                
        }
    }

    这串代码的作用是先执行t1线程,再执行t2线程。对于这样,如果改变join和start方法的顺序,结果是不一样,失去了同步的作用。join的原理说的简单点就是,调用其它线程的wait方法,执行完毕后再执行notifyAll方法。

    Sleep和wait方法之间有什么区别,这个也是必须要掌握的。首先sleep是线程的方法,而wait是Object方法。sleep它是让出CPU资源,暂停设置的时间,时间一到,恢复运行状态,最主要的是它不会释放对象锁。而调用wait方法,释放对象锁,处于挂起状态,只有调用notifyAll才可以进入对象锁定池。下面是代码案例:

    package cn.test;
    
    public class TaskMy implements Runnable{
    
        @Override
        public void run() {
            System.out.println("线程1执行");
            for(int i=0;i<100;i++) {
                try {
    //                线程睡眠
                    Thread.sleep(100);
                    System.out.println(Thread.currentThread().getName()+"====="+i);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("线程1结束");
        }
    }
  • 相关阅读:
    CAN总线布线规范
    使用make_ext4fs时报错,No such file or directory
    安装arm-2009q3交叉编译器后,执行No such file....
    Busybox下make menconfig报错处理!
    解决Markdown转为PDF后,尖括号不能正确显示问题。
    开发板与PC直连 交叉、直连网线做法
    BusyBox tftp使用
    STM32的flash数据页转存过程分析!
    c语言中log函数的使用!
    POJ 3667 Hotel
  • 原文地址:https://www.cnblogs.com/lichangyun/p/10213866.html
Copyright © 2011-2022 走看看