多线程入门
线程和进程
-
什么是进程?
我们可以把正在操作系统中运行的.exe程序理解成一个进程
- 什么是线程?
线程可以理解为在进程中独立运行的子任务
使用多线程
public class Test {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName());
}
}
- ②.通过继承Thread类创建线程
- `public class Mythread extends Thread {
@Override
public void run() {
super.run();//不能缺少
System.out.println("MyThead");
}}
---------------main-------------------
public static void main(String[] args) {
Mythread mythread=new Mythread();
mythread.start();
System.out.println("运行结束");
}
----------------
输出结果:
运行结束 //main线程
MyThead //MyThead线程
- ③. 实现Runnable接口
public static void main(String[] args) throws InterruptedException {
Thread thread=new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Runnable中的run方法运行了");
}
});
thread.start();
Thread.sleep(200);
System.out.println("main方法结束了");
}
---------------------------------
运行结果:
Runnable中的run方法运行了
main方法结束了
可以使用Runnable接口创建线程的原因:
Thread类实现了Runnable接口,
thread.steart()方法调用了Runnable接口的run()方法
因此:线程要执行的内容可以放到Runnable里的run()方法中执行
使用Runnable接口的优点:
继承特性可以空出来去继承其他的类
Thread类的常用方法
①. static Thread CurrentThread():静态方法
功能:可返回代码端正在被哪个线程调用
②. static Thread sleep(long millis):静态方法
功能:将当前正在被执行的线程暂停millis毫秒
注意:正在被执行的线程指的是 this.currentThead()返回的线程
例如:
在main线程方法中执行 Thread.sleep() 休眠的就是main方法
在MyThread线程中执行 Thread.sleep() 休眠的就是MyThread线程
在main线程中执行mythread.sleep() 休眠的也是main方法
③.static void yield()
功能:线程让步。使用了这个方法之后,线程会让出CPU执行权,让自己或者其它的线程运行。
④. void setName()----设置线程名
⑤. void getName()-----获取线程名
⑥. void start()----启动线程
public class Mythread extends Thread {
public Mythread() {
System.out.println("构造方法的打印:"+Thread.currentThread().getName());
}
@Override
public void run() {
super.run();
System.out.println("run方法的打印:"+Thread.currentThread().getName());
}
}
-----------------main----------------------
public static void main(String[] args) throws InterruptedException {
Mythread mythread=new Mythread();
Thread.start();
Thread.sleep(2000);
System.out.println("main");
}
结果:
- run()和start()的区别
1)mythread.run():立即执行run()方法,不启动新的线程
2)mythread.start():执行run()方法的时机不确定,启动新的线程
//MyThread线程同上
-------------main---------------
public static void main(String[] args) throws InterruptedException {
Mythread mythread=new Mythread();
mythread.setName("mythread_haha");
mythread.run();
mythread.start();
}
结果: