首页 > 编程语言 > 详细

java-多线程

时间:2019-04-30 23:15:59      阅读:110      评论:0      收藏:0      [点我收藏+]

学习笔记,持续更新!!!

2019.4.30

1.进程和线程的概念

  进程:进程是操作系统结构的基础,是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动;是程序在一个数据集合上运行的过程,它是系统进行志愿分配和调度的一个独立单位。

  线程:线程可以理解成是在进程中独立执行的子任务。比如,QQ.exe运行时就有很多的子任务同时运行:好友视频线程、下载文件线程、传输数据线程。

2.java实现多线程有两种方法(1)继承extends类(2)实现Runnable接口,由于java语言只能单继承,所以建议使用第二种方法

一个小例子:

public class MyThread implements Runnable{

    @Override
    public void run() {
        System.out.println("running.........");
    }
}

public class test {

    @Test
    public void demo1(){
        Runnable runnable = new MyThread();
        Thread thread = new Thread(runnable);
        thread.start();
        System.out.println("Ending..........");
    }
}

运行结果:

技术分享图片

从上图的运行结果来看,说明使用多线程技术时,代码运行的结果与代码执行顺序或调用顺序无关(异步执行)。

异步执行:执行语句结束的顺序与语句执行开始的顺序并不一定相同。

3.几个常用方法

  (1)currentThread()方法

      currentThread()方法可返回代码段正在被哪个线程调用的信息。

  (2)isAlive()方法

      isAlive()的功能是判断当前的线程是否处于活动状态。

    (3)sleep()方法

      sleep()的作用是在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行)。

    (4)getId()方法

      getId()方法是取得线程的唯一标识。

  (5)interrupt()方法

      interrupt()方法的使用效果并不像for+break语句那样,马上就停止循环。调用interrupt()方法仅仅是在当前线程打了一个停止的标记,并不是真的停止线程。(Thread类中的方法)

      interrupted()方法:测试当前线程是否已经中断,执行后将状态标志设置为false。(Thread类中的方法)

      isInterrupted()方法:测试线程Thread对象是否已经中断,但不清楚状态标志。(Thread类中的方法)

      那么如何让线程停止呢——异常法

public class MyThread extends Thread{

    @Override
    public void run() {
        
        try{
            for(int i=0; i<500000; i++){
                if(this.isInterrupted()){
                    System.out.println("已经是停止状态!");
                    throw new InterruptedException();
                }
                System.out.println("i=" + (i+1));
            }
        }
        catch(InterruptedException e){
            System.out.println("进MyThread.java类run方法中的catch了!");
            e.printStackTrace();
        }
    }
}

public class test {

    @Test
    public void demo1(){
        
        try{
            MyThread thread = new MyThread();
            thread.start();
            thread.sleep(200);
            thread.interrupt();
        }catch(Exception e){
            System.out.println("main catch");
            e.printStackTrace();
        }
        
        
    }
}

测试结果:

技术分享图片

还可以使用interrupt()方法与return结合使用实现线程停止,不过还是建议使用“抛异常”的方法,因为catch快中还可以将异常向上抛,使线程停止的事件得以传播。

如果线程在sleep状态下停止线程,会进入catch语句,并且清除停止值,使之变成false.

  (6)stop()方法

    stop()方法已过时,这种方法会强行停止线程,可能使一些清理性的工作得不到完成,导致线程不安全。

  (7)suspend与resume方法

    suspend()方法暂停线程

    resume()方法恢复线程执行

  (8)yield()方法

    yield()方法的作用是放弃当前的cpu资源,将挞让给其他的任务去占用cpu执行时间。但放弃的时间不缺定,有可能刚刚放弃,马上又获得cpu时间。

  (9)setPriority()方法

    setPriority()方法设置线程优先级,线程的优先级分为1~10.

 

java-多线程

原文:https://www.cnblogs.com/mxj961116/p/10798452.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!