线程知识点

一.如何创建线程?1.继承thread 类并重写其中的run方法。 1.1 定义一个类继承Thread类 1.2 重写run方法 1.3 创建对象,也就是线程对象 1.4 调用方法start,开启线程并让线程执行,同时让Java虚拟机调用run方法。

class MyThread extends Thread{private String name;MyThread(String name){this.name=name;}public void run(){for(int i=0;i<10;i++){system.out.println(name+"  "+i);}}}class Threademo {public static void main(String[] args){ MyThread  m1=new  MyThread("王明"); MyThread  m2=new  MyThread("李阳"); m1.start(); m2.start();}}

调用run方法和start方法的区别: 调用run方法不开启线程,调用start方法开启线程并使得对象调用run方法。2.声明实现runnable接口 2,1 定义类实现Runnable接口 2.2 覆盖接口的Runnable的Run方法,将线程任务代码定义到run方法 2.3 创建Thread类的对象 2,4 将实现接口的子类对象作为参数传给Thread的构造方法。 2.5 调用start方法启动线程。

class demo implements Runnable{  private String name;  demo(String name)  {    this.name=name;   }  public void run()  {    for(int i=0;i<10;i++)    {     system.out.println(name+"  "+Thread.currentThread().getName()+" "+i);     }      }    }class Threaddemo2{public static void main(Stirng[] args){ //创建demo子类的对象,非线程对象。 demo d=new demo(“demo”);//创建Thread类的对象,将runnable接口的对象作为参数传给Thread的对象。 Thread t1=new Thread(d); Thread t2=new Thread(d);//将线程启动 t1.start(); t2.start();

二.两种方式比较好用?
1.实现接口的方式比较好,避免了单继承的局限性,较为常用。为什么要传参数:private Runnable target;Thread(Runnable target){this.target=target;}public void run(){if(target!=null){target.run();}}Runnable d =new demo;Thread t1=new Thread(d);线程任务已被封装到Runnable接口的run方法中,run方法所属于runnable子类对象,所以要将这个子类对象作为参数传给Thread的构造函数,这样,线程对象创建时可以明确线程任务。
2.继承Runnable接口这种方式更符合面向对象思想。线程分为两部分,一部分为线程对象,一部分为线程任务。继承Thread类的方法将线程任务和线程对象耦合在一起。
三.后台线程
守护线程,自动结束t2.setDaemon(boolean 类型的true或false)即为后台线程。进程结束它即结束。
四.线程的状态:阻塞状态,具备CPU的执行权(运行状态),不具备CPU的执行权,睡眠状态,等待状态
五.线程的优先级:将getName变成tostring后 ,返回线程名称,线程优先级,线程组线程组(Thread group):通过Thread构造方法明确线程对象所属的线程组。高优先级执行先于低优先级,10级的先于5级的。优先级用数字表示,1到10表示。默认的优先级为5级。最明显的优先级是1,5,10用setpriority设置优先级。格式:setpriority(Thread.Maxpriority)主线程组是默认的。interrupt中断线程。
六.线程睡眠
1.sleep方法和wait方法的异同
1.1 相同点:都处于冻结状态
1.2 不同点:sleep方法必须指定时间,wait方法可指定时间也可不指定 时间
sleep是时间到了会临时处于阻塞状态,wait如果没有指定时间,必须通过notify或 all notifyall唤醒。
sleep不一定必须定义在同步中,wait必须在同步中 都定义在同步中,线程执行到sleep不会释放锁,执行到wait会释放锁。
2.线程如何停止?
七.线程让步
yield()方法线程临时暂停。Thread.yield();线程临时暂停。将执行权释放,让其他线程执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我无法通过文字回答您所提供的多线程知识点流程图。然而,我可以为您提供一个简单的文字描述来帮助您理解Java多线程的核心概念和流程: 1. 首先,创建一个线程类。这可以通过继承Thread类或实现Runnable接口来实现。 2. 在线程类中,重写run()方法。这个方法包含了线程要执行的代码逻辑。 3. 创建线程的实例。如果使用继承Thread类的方式,直接实例化线程类即可。如果使用实现Runnable接口的方式,需要创建一个Thread对象,并将实现了Runnable接口的类的实例作为参数传递给Thread的构造方法。 4. 调用start()方法启动线程。start()方法会启动一个新的线程,并在新线程中执行run()方法中的代码。 5. 当线程开始执行时,它会进入就绪状态,等待操作系统分配CPU资源。 6. 一旦获得CPU资源,线程就会进入运行状态,并开始执行run()方法中的代码。 7. 在运行过程中,线程可能会被阻塞,例如等待IO操作完成或等待其他线程的完成。当这些条件满足时,线程将重新进入就绪状态,等待再次获得CPU资源。 8. 当线程执行完run()方法中的代码后,它将进入终止状态,表示线程的生命周期已经结束。 请注意,这只是一个简单的概述,涉及到更多的细节和概念,例如线程同步、互斥、等待和通知等。如果您需要更详细的信息,请提出您想要了解的具体问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值