线程知识点

一.如何创建线程?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
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值