多线程(一)

多线程,互联网必备知识,这里分3次分享

第一篇介绍多线程,如何实现多线程,以及多线程的几种状态

第二篇通过代码实现多线程各种状态

第三篇如何实现线程安全

进入正题

首先,弄清楚什么是线程,什么是进程

进程:运行中的程序,系统分配资源的最小单位

线程:可独立执行代码的子任务,系统执行代码的最小单位,进程中的代码总是由某个确定的线程执行

弄清楚这些了我们来看下如何创建线程,方法有两种

1.实现Runnable接口

2.继承Thread类(这里说下,其实Thread类也实现了Runnable接口)

给出代码之前,我们对比下这两种方法,他们都可以实现多线程,区别在于一个类只能继承一个类而可以实现多个接口,所以具体使用哪种方式创建线程,因情况而异,好了下面看代码:

线程1:

public class Thread1extends Thread{

private String msg;
public Thread1(String msg) {
super();
this.msg =msg;
}
public void doSomeThing(Stringmsg){
System.out.println("This is Thread1,message:"+msg+",threadName:"+Thread.currentThread().getName());
}
@Override
public void run() {
doSomeThing(msg);
}
}



线程2:

public class Thread2 implements Runnable{

private String msg;
public Thread2(String msg) {
super();
this.msg =msg;
}

public void doSomeThing(Stringmsg){
System.out.println("This is Thread2,message:"+msg+",threadName:"+Thread.currentThread().getName());
}
@Override
public void run() {
doSomeThing(msg);
}

}



测试类:

public class Main {

public staticvoid main(String[] args) {
Thread1 myThread1 =new Thread1("hello wordl 1!");
myThread1.start();
Thread2 myThread2 =new Thread2("hello world 2!");
Thread newThread =new Thread(myThread2);
newThread.start();

Thread2 myThread3 =new Thread2("hello world 3!");
myThread3.run();
}

}



打印结果为:

This is Thread1,message:hello wordl 1!,threadName:Thread-0

This is Thread2,message:hello world 3!,threadName:main

This is Thread2,message:hello world 2!,threadName:Thread-1


有兴趣的同学也可以自己考代码试一下,这里可以看到Thread1继承了Thread类,而Thread2实现了Runnable接口,并且他们都重写了run方法,而在创建线程的时候,也有少许不同

这些没什么特殊要解释的,直接看打印的后半句,我打印了执行线程的名字,大家可以看到myThread2和myThread3打印的线程名字不同,这是由于myThread3是在main方法中执行的run方法,因此执行它的线程是main线程

接下来说一下线程的几种状态,这个面试时候经常会问,注意一定不要打错,基础题

我们通过Thread类的源码可以看到有这么一个叫State的枚举,里面有如下几种状态:

NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED

线程生命周期会经过以下阶段

新建------就绪&运行------死亡

其中就绪和运行可以相互转换,例如线程调用Thread.yield();方法

而运行期间 线程也可能发生 阻塞

发生阻塞可能因为 有锁没有释放,除了阻塞还可能进入睡眠状态,比如调用了sleep方法

我们在下一篇分享中,会用代码给大家掩饰这六种状态








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值