多线程基础(1)

一、理解多线程
概念:
(1)进程
      正在运行的程序,是系统进行资源分配和调度的独立单位,每一个进程都有自己的内存空间和系统资源。

多进程:
      同一时间段可以运行多个应用程序任务,从而提高CPU的使用率。
注意:单CPU在同一时间点上只能做一件事情,所以多进程的意义在于使得CPU在多个进程当中高速切换,以达到多个程序好像同时进行的效果。

(2)线程
      在一个进程内可以执行多个任务,每一个任务就可以看做是一个线程。
       线程是程序的执行单元,也就是执行路径,是程序使用CPU的最基本的单位。

多线程:程序有多条执行路径。

多线程的意义在于:可以提高应用程序的使用率
      原因:程序的执行实质上是在争抢CPU的资源,当其中一个进程如果执行路径(线程)比较多,那么就会有更高的几率抢占到CPU的执行权。

二、创建多线程
创建多线程有三种方法:
1.继承Thread类
      步骤:
            a.自定义MyThread类继承Thread类
            b.MyThread类重写run()方法
            c.创建线程对象
            d.启动线程

class MyThread extends Thread{
    @Override
    public void run(){
        //需要被线程执行的代码
    }
}

class Test{
    public static void main(String args[]){
        Thread t1=new Thread();
        Thread t2=new Thread();
        t1.start();
        t2.start();
    }
}

注意:
1.为什么要重写run()方法?
      并不是所有的方法都要执行,所以java提供了run()方法用来包含所有需要被线程执行的代码块。
2.start()和run()方法的区别
      run()方法–用来包含所有需要被线程执行的代码块,但其本质只是一个普通方法。
      start()方法–首先启动线程,然后再由jvm去调用该线程的run()方法,也就是线程需要执行的代码块。

2.实现Runnable接口(Thread类源码也实现了Runnable接口)
      步骤:
            a.自定义MyRunnable类实现Runnable接口
            b.MyRunnable类重写run()方法
            c.创建MyRunnable类对象
            d.调用Thread类带参构造并将创建好的 MyRunnable对象作为参数传递
            e.启动线程

class MyRunnable implements Runnable{
    @Override
    public void run(){
        //需要被线程执行的代码块
    }
}
class Test{
    public static void main(String args[]){
        MyRunnable r=new MyRunnable();
        Thread t=new Thread(r);
        t.start();
    }
}

3.实现Callable

三、线程控制
1.线程控制–线程休眠:

public static void sleep(long millis)throws InterruptedExveption
在指定毫秒内让当前正在执行的线程暂停执行,此操作收到系统计时器和调度程序精确度和准确性的影响
注意:sleep()和wait()方法的区别

2.线程控制–加入线程:

    public final void join()  
    -- 等待该线程终止,也就是说只有这个线程执行完毕,其他线程才可以执行

3.线程控制–礼让线程:

public static void yield()
    -- 暂停当前正在执行的线程对象,并执行其他线程
        让多个线程的执行更和谐,但是不能靠它保证一人一次

4.线程控制–守护线程:

    public final void setDaemon(boolean on)
    -- 将该线程标记为守护线程或用户线程,当正在运行的线程都是守护线程时,java虚拟机退出。
        所以该方法必须在启动线程前调用
        该方法首先调用该线程的checkAccess方法
        被守护的线程结束,守护线程就没有继续执行的必要了,所以会在一段时间后会结束

5.线程控制–中断线程

public final void stop()  //让线程停止,已经过时,但还可以使用
    public void interrupt()   //中断线程,在此打一个中断的标记,将鲜橙状态终止让其抛出异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值