概述
java对线程的支持主要体现在Thread类以及Runable接口上,他们都位于java.lang包下,不管是Thread类还是Runable接口,它们都有public void run()这个方法,这个run方法为我们提供了线程实际工作时的代码,换个说法,代码写在run方法中。
1.使用线程的好处,和使用线程的两种方法
1.充分利用CPU资源,简化代码模型,提高用户的体验。
2.第一种继承Thread类;第二种实现Runnable接口。
2.什么时候用Thread类和Runnable接口,直接说这两者的区别在哪里?
Thread:继承Thread实现的模式是 定义多个线程,各自完成各自的任务,数据资源各论各的,单继承 创建线程简单
Runnable: 实现Runnable实现的模式是 定义多个线程 ,做一个任务.其实在做一个任务用多个线程来做也可以用继承Thread类来实现只是比较有局限性,一般我们用实现Runnable接口来实现,数据资源共享,避免单继承的局限性。大多数情况下,用 Runnable接口
3.多线程常用的方法:
4. 线程里面的方法
public class test1{
public static void main(String[]args)
//获取主线程
Thread t=Thread.currentThread();
//修改名字
t.setName("主线程:");
//修改优先级
t.setPriority(Thread.MAX_PRIORITY);
//输出名字
System.out.println(t.getName());
//输出优先级
System.out.println(t.getPriority());
//是否激活
System.out.println(t.isAlive());
......
}
5.创建线程的两种方法
1.第一种继承Thread类
public class ThreadA extends Thread {
//重新run方法:需要线程完成任务
@Override
public void run(){
for (int i = 0; i <20; i++) {
try {
//让线程休眠1秒
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//获取当前线程的名字
System.out.println(Thread.currentThread().getName()+"\t"+i);
}
}
2.第二种实现Runnable接口
public class test3 implements Runnable{
@Override
public void run() {
//重写run方法
for (int i = 0; i <20; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"\t"+i);
}}
}
6. 创建线程的五个状态
1.创建状态:创建该类的实例对象,即创建了线程对象;
2.就绪状态:线程启动以后,没有抢占到cpu资源
3.运行状态:线程抢到资源开始完成自己的任务
4.阻塞状态:程序员调用某个方法将线程转入休眠状态 ,冻结不会和其他线程抢占资源
5.死亡状态:调用方法+自然死亡
7.总结问题
-使用线程用创建的线程去调start方法,才算启动的线程,为什么不是调run方法呢,调run方法:当前程序中只有mian一条线程,所有的事情需要main来完成,调start:开启一个全新的线程,主线程负责main方法中的代码 开启的线程负责run方法中的代码,各司其职。