Java多线程的创建(一)
- 
方法一:继承Thread类实现1.创建一个类A,并继承Thread类 2.重写A的run()方法 3.创建A的实例对象b,即创建了线程对象 4.使用b调用start()方法:启动线程(会自动调用run方法) 
例如:
package 多线程;
/*
*1.创建两个线程分别完成100以内奇数偶数的输出
*/
public class CreateThread {
    public static void main(String[] args){
        Test1 t1 = new Test1();
        Test2 t2 = new Test2();
        t1.start();
        t2.start();
    }
}
//输出偶数
class Test1 extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            if (i % 2 == 0) {
                System.out.println("线程一输出偶数:"+i);
            }
        }
    }
}
//输出奇数
class Test2 extends Thread{
    @Override
    public void run() {
        for(int i =0; i < 50;i++){
            if (i %2 != 0) {
                System.out.println("线程二输出奇数:"+i);
            }
        }
    }
}
线程一输出偶数:0
线程一输出偶数:2
线程一输出偶数:4
线程二输出奇数:1
线程二输出奇数:3
线程二输出奇数:5
	....
线程二输出奇数:47
线程二输出奇数:49
线程一输出偶数:6
线程一输出偶数:8
输出结果省略了一部分,可以看出来,两个线程的执行是交替的,所以奇数和偶数也是交替输出.
- 
方法二:实现Runnable接口- 
定义子类A,实现Runnable接口。 
- 
子类中重写Runnable接口中的run方法。 
- 
通过Thread类含参构造器创建线程对象。 
- 
将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中。 
- 
调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法。 
 
- 
例如:
package 多线程;
public class CreateThread2 {
    public static void main(String[] args){
       Test3 t3 = new Test3();
       Test4 t4 = new Test4();
        //多态性
       Thread t = new Thread(t3);
       Thread tt = new Thread(t4);
       t.start();
       tt.start();
    }
}
//输出偶数
class Test3 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            if (i % 2 == 0) {
                System.out.println("线程一输出偶数:"+i);
            }
        }
    }
}
//输出奇数
class Test4 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            if (i % 2 != 0) {
                System.out.println("线程二输出奇数:"+i);
            }
        }
    }
}
//结果和上一个类似
- 
注意事项- 
如果自己手动调用run()方法,那么就只是普通方法,没有启动多线程模式。 
- 
run()方法由JVM调用,什么时候调用,执行的过程控制都有操作系统的CPU 调度决定。 
- 
想要启动多线程,必须调用start方法。 
- 
一个线程对象只能调用一次start()方法启动,如果重复调用了,则将出现异常。 
 
- 
- 
比较两种方法1.继承Thread:线程代码存放Thread子类run方法中。 2.实现Runnable:线程代码存在接口的子类的run方法。 3.实现方式的好处:  ①避免了单继承的局限性  ②多个线程可以共享同一个接口实现类的对象,非常适合多个相同线 程来处理同一份资源 
- 
说在最后码字不易,感谢支持。水平有限,难免错漏和不准确,欢迎批评指正! 
    人生无完美,曲折亦风景.
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号