Java多线程编程概述
Java多线程的安全问题
Java多线程同步
Java多线程间的通信
Java线程Lock
Java多线程管理
保障线程安全的设计技术
Java锁的优化及注意事项
Java多线程集合
【Java多线程】单例模式与多线程

Java多线程的创建与启动方式

在Java中,创建一个线程就是创建一个Thread类(子类)的对象(实例)。

Thread类有两个常用的构造方法:Thread()与Thread(Runnable).对应的创建线程的两种方式:

● 定义Thread类的子类

● 定义一个Runnable接口的实现类

这两种创建线程的方式没有本质的区别。

package com.wkcto.createthread.p1;

/**
 * 1)定义类继承Thread
 * Author : 蛙课网老崔
 */
public class MyThread extends  Thread{
    //2) 重写Thread父类中的run()
    //run()方法体中的代码就是子线程要执行的任务
    @Override
    public void run() {
        System.out.println("这是子线程打印的内容");
    }
}
package com.wkcto.createthread.p1;

/**
 * Author : 蛙课网老崔
 */
public class Test {
    public static void main(String[] args) {
        System.out.println("JVM启动main线程,main线程执行main方法");
        //3)创建子线程对象
        MyThread thread = new MyThread();
        //4)启动线程
        thread.start();
        /*
            调用线程的start()方法来启动线程, 启动线程的实质就是请求JVM运行相应的线程,这个线程具体在什么时候运行由线程调度器(Scheduler)决定
            注意:
                start()方法调用结束并不意味着子线程开始运行
                新开启的线程会执行run()方法
                如果开启了多个线程,start()调用的顺序并不一定就是线程启动的顺序
                多线程运行结果与代码执行顺序或调用顺序无关
         */
        System.out.println("main线程后面其他 的代码...");
    }
}
package com.wkcto.createthread.p3;

/**
 * 当线程类已经有父类了,就不能用继承Thread类的形式创建线程,可以使用实现Runnable接口的形式
 * 1)定义类实现Runnable接口
 * Author : 蛙课网老崔
 */
public class MyRunnable implements Runnable {
    //2)重写Runnable接口中的抽象方法run(), run()方法就是子线程要执行的代码
    @Override
    public void run() {
        for(int i = 1;  i<=1000; i++){
            System.out.println( "sub thread --> " + i);
        }
    }
}
package com.wkcto.createthread.p3;

/**
 * 测试实现Runnable接口的形式创建线程
 * Author : 蛙课网老崔
 */
public class Test {
    public static void main(String[] args) {
        //3)创建Runnable接口的实现类对象
        MyRunnable  runnable = new MyRunnable();
        //4)创建线程对象
        Thread thread = new Thread(runnable);
        //5)开启线程
        thread.start();

        //当前是main线程
        for(int i = 1;  i<=1000; i++){
            System.out.println( "main==> " + i);
        }

        //有时调用Thread(Runnable)构造方法时,实参也会传递匿名内部类对象
        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 1;  i<=1000; i++){
                    System.out.println( "sub ------------------------------> " + i);
                }
            }
        });
        thread2.start();
    }
}

 

全部教程