创建线程的方式
创建线程的方式之一
继承Thread类 ,重写run( )方法,调用start开启线程
package com;
public class TestThread extends Thread{
//继承Thread类,重写run()方法,调用start 开启线程
@Override
public void run() {
//run方法线程体
for (int i = 0; i < 20; i++) {
System.out.println("我在看代码"+i);
}
}
public static void main(String[] args) {
//main线程,主线程
//创建一个线程对象
TestThread testThread = new TestThread();
//调用start()方法开启线程
testThread.start();//直接调用run()的话,就先只执行 run()方法了
for (int i = 0; i <2000; i++) { //当for循环执行到2000次时输出"我在看代码"会在"我在学习多线程--"中交替输出
System.out.println("我在学习多线程--"+i);
}
}
}
每执行一次其运行效果都不一样
run()方法线程和mian()方法线程在循环次数很大时就会有交替输出的效果,因为cpu的执行速度很快,所以循环次数要很大,才会有交替的效果
总结
注意,线程开启不一定立即执行,是cpu执行
创建线程之二
定义MyRunnable类实现Runnable接口
实现run()方法,编写线程执行体
创建线程对象,调用start()方法启动线程
package com;
//创建线程方式2 :实现runnable接口,重写run方法
public class TestThread2 implements Runnable{
//重写run()方法
@Override
public void run() {
for (int i = 0; i < 200; i++) {
System.out.println("run方法执行"+i);
}
}
public static void main(String[] args) {
//创建runnable接口的实现类对象
TestThread2 testThread2 = new TestThread2();
//创建线程对象,通过线程对象来开启我们的线程,
Thread thread = new Thread(testThread2);
thread.start();
//简写方式 new Thread(testThread2).start();
for (int i = 0; i < 2000; i++) {
System.out.println("执行main方法--"+i);
}
}
}
执行的效果和方法一的效果差不多 每次执行的效果都不一样
总结
-
继承Thread类
(1) 子类继承Thread类具备多线程能力
(2) 启动线程:子类对象.start( )
(3) 不建议使用使用:避免oop单继承局限性 -
实现Runnable接口
(1)实现接口Runnable具有多线程能力
(2)启动线程:传入目标对象+Thread对象.start( )
(3)推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用