java多线程(新手笔记)

1、进程和线程

一个程序的执行过程就是一个进程;而一个程序中的多个任务则被称为线程。
进程是资源分配的基本单位,持有资源(共享文件,共享内存)和线程;线程是进程中执行运算的最小单位,同一进程中有多个线程,线程共享进程的资源。
举个例子:
当我们打开计算机的任务管理器,会显示出当前机器的所有进程,QQ,微信等。当QQ运行时,就有很多子任务在同时运行。比如当我们边打字边好友视频时这些不同的功能都可以同时运行,其中每一项任务都可以理解成“线程”在工作。

2、使用多线程

在Java的开发中实现多线程编程的方式有两种,一种是继承 Thread 类,另一种是实现 Runnable 接口。这两个方法都继承自java.lang包,有一个同样的run方法(run方法提供线程执行的代码)。使用继承 Thread 类创建线程,最大的局限就是不能多继承,所以为了支持多继承,完全可以实现 Runnable 接口的方式。需要说明的是,这两种方式在工作时的性质都是一样的,没有本质的区别。

2.1线程的创建

  • 继承Thread
public class Actor extends Thread{
    public void run(){

    }


    public static void main(String[] args) {
        Thread actor = new Actor();
        actor.setName("Mr.Thread");
        actor.start();
    }
}
  • 实现Runnable接口
class Actress implements Runnable{
    public void run(){
    }
}
public class Actor extends Thread{
    public void run(){
    }
    public static void main(String[] args) {

        Thread actress = new Thread(new Actress(), "Ms.actress");
        actress.start();
    }
}

2.2线程的方法

  • void start() //启动线程
  • static void sleep(long millis) //休眠线程指定时间,有重载方法
  • void join(long millis) //使其他线程等待当前线程终止,有重载方法
  • static void yield() //当前运行线程释放处理器资源
  • static Thread currentThread() //返回当前运行的线程引用

2.3线程的停止

java自带stop方法,这个方法是java1.0的时候提出来的,随着时间的流逝,现在这个方法已经是错误的不再使用,最大的弊端就是强制停止了线程,我们不知道线程处理到什么地步就被突然关闭了。
那么正确的方法是什么呢,那就是设置一个退出旗标。如下所示:

    @Override
    public void run() {
        while(keepRuning) {
            for(int i = 0;i < 5;i++) {
                System.out.println(Thread.currentThread().getName() + "进攻对方[" + i + "]次");

                Thread.yield();
            }
        }

        System.out.println(Thread.currentThread().getName() + "结束了战斗");
    }

keepRuning就是我们设置的退出旗标,当它false的时候线程走完当前循环然后停止线程。使得我们一次任务可以被完整的完成。而大家所说的interrupt方法来中断线程也是错误的方法,并不能使线程停下来。如果仲尼中断线程后再调用isInterrupt方法来判断停止线程,其是指还是设置退出旗标。

2.3线程的同步与互斥

线程互斥的实现: synchronized(intrinsic lock),给代码加上锁,在当前线程时间内,其他线程不能访问线程的资源
线程同步的实现: wait()/notify()/notifyAll()调用wait使线程进入等待,调用notify或者notifyAll唤醒所有等待线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值