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结束");
        }
    }
  • 相关阅读:
    关于迭代器模式的个人理解
    设计模式之迭代器模式详解(foreach的精髓)
    关于备忘录模式的个人理解
    设计模式之备忘录模式详解(都市异能版)
    关于桥接模式的个人理解
    桥接模式详解(都市异能版)
    设计模式之 中介者模式
    关于命令模式个人的理解 撤销 重做的实现
    剑指offer 连续子数组的最大和
    剑指offer 删除链表中重复的结点
  • 原文地址:https://www.cnblogs.com/lichangyun/p/10213866.html
Copyright © 2011-2022 走看看