这里写目录标题
实现多线程
进程
线程
多线程的实现方式
具体代码
注意,要在自定义的方法中继承Thread,并且重写run方法
在run方法里,是自己的需求
注意,不能用普通的方法调用方式,而是用start(属于Thread中的方法,这里采用多态形式),用来启动线程,启动run
两个小问题
设置和获取线程名称
获取线程名称
要在重写的run方法中获取,采用getName方法
另一种方法
在测试类main方法中得到线程名称
因为这个方法返回线程对象,并且是静态方法,所以可以直接利用Thread类名调用该方法,从而返回对象,再紧接着调用getName方法,就可以不用回到类定义中写getName
默认线程名称
注意,获取线程名称的操作就是定义对象时,采用的无参构造,但是需要在Mythread类中的run方法中调用getName,可以直接进行调用 例如 输出语句中写
getName(),因为这是父类中封装的方法
源码,在源码中,有一个无参构造器,所以,如果直接调用,会采用默认形式,如上图右侧
自定义线程名称
方法定义
设置名称时,要在测试类中利用Thread子类对象调用setName方法
带参构造器定义
首先要在子类中写入无参带参构造方法,带参构造加入String类型参数,调用super方法,传回父类中的带参构造(因为这个带参构造定义名称的功能是Thread类中的,所以要写带参构造时调用super)
线程调度
简介
设置和获取线程优先级
这里直接利用定义出来的对象 进行方法的调用 这些方法都是Thread的 所以这里采用的是多态的方法
注意,设置优先级,只是分给该线程的时间片更多,不一定会一定优先执行该线程
线程控制
sleep方法 使当前正在执行的线程停留指定的毫秒数
这个方法要在run中写入
作用 可以让线程每隔一段时间再执行,使线程执行的次数较为均衡
join方法 等待线程死亡
这个方法可以使某一个线程执行完毕之后,其他线程才开始执行,所以要在测试类中执行,在某一个线程启动之后的下一行代码,利用线程对象调用,采用join方法
setDaemon(Boolean i)方法 标记线程为守护线程
这里设置td1和td2为守护线程,设置main方法为主线程,命名为刘备,当主线程执行完毕之后,守护线程也会紧接着关闭,但不会立马关停
线程的生命周期
多线程的实现方式之二:实现Runnable接口
代码演示
这里对象实现了一个接口,并重写run方法,
注意 这里跟Thread类无关,所以不能直接调用getName方法,要用Thread.currentThread()调出当前线程的对象,之后利用这个调用getName()方法
这里主测试类中
首先创建一个myRunnable 类对象,用来作为参数传入构造方法,创建Thread对象,将my传入,并构造线程名称,之后,启动线程