欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

线程知识点

程序员文章站 2024-01-29 19:23:34
...

一.如何创建线程?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();线程临时暂停。将执行权释放,让其他线程执行。