多线程的概念

**线程是程序执行的一条路径,一个进程中可以包含多条线程。 **

1.多线程并行和并发的区别

并行就是两个任务同时运行,就是甲任务运行的同时,乙任务也在运行(需要多核CPU)。
并发是指两个任务都请求运行,而处理器只能接受一个任务,就把这两个任务安培轮流运行,由于时间间隔较短,使人感觉两个任务都在运行。

2.线程的实现方式1——继承Thread类

1.使用步骤

a.定义类继承Thread
b.从写 run方法
c.把新线程要做的事情写在run方法中
d.创建线程对象
e.开启新线程(start方法),内部会自动执行run方法
案例

public class Demo{
public static void main(String[] args){
//使用子线程
MyThread thread=new MyThread();
//不能通过thread.run()来执行任务,因为这种方式是主线程执行的。
thread.start();//正确的方式,内部会开启新的线程,会直接调用线程的run方法
//循环创建线程;多线程是抢占式执行的
for(int i=0;i<10;i++){
MyThread thread=new MyThread();
thread.start();
}

}
}
class MyThread extends Thread{
@Override
public void run(){
System.out.println("aaa.........");
}
}

3.线程的实现方式2——定义类实现Runnable接口

1.使用步骤

a.定义类实现Runnable接口
b.实现run方法
c.把新线程要做的事情放在run方法中
d.创建自定义的Runnable的子类对象创建Thread对象,传入Runable
e.调用start()开启新线程,内部会自动调用Runnable的run方法

public class Demo{
public static void main(String[] args){
//创建Runnable对象
MyThread runnable=new MyThread();
//创建Thread对象
Thread thread=new Thread(runnable);
//启动线程
thread.start();
//循环创建线程
for(int i=1;i<10;i++){
Thread thread=new Thread(runnable);
thread.start();
}

}
}
class MyThread implements Runnable{
@Override
public void run(){
System.out.println("aaa..."+Thread.currentThread());//当前线程
}

4.上述两种方式的区别

1.查看源码的区别

继承Thread由于子类重写了Thread的fun方法,当调用start方法时直接找子类的run方法。
实现Runnable构造函数中传入了Runnable的引用,有个成员变量记住了它,调用run方法时内部判断成员变量Runnable的引用是否为空。

2.继承Thread

好处:可以直接使用Thread类中的方法,代码简单。
坏处:如果已经有了父类,就不能用这种方法。

3.实现Runnable接口

好处:即使自己定义的线程有了父类也没关系,因为有了父类也可以实现接口,代码更灵活。
坏处:不能直接使用Thread中的方法,需要先获取到线程对象后,才能得到Thread的方法,代码复杂。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值