线程(1)---创建线程的两种方式

1. 进程个线程的区别
进程:系统程序运行的最小单位,一个程序至少有一个进程:系统会在内存中开辟一块空间用来运行程序。
线程:程序执行任务的最小单位,线程不能单独存在,必须存在与进程中,一个进程中至少包含一个线程。
2. 创建和启动线程的两种方式
创建线程的方式一:
[public] class 类名 implements Runnable{
//重写run方法
}
创建对象: 类名 对象名 = new 类名();
启动线程 Thread t = new Thread(对象名);
启动: t.start(); // 启动线程调用的是start方法,而不是run方法。
原因:因为Runnable接口中没有start方法,所以需要创建thread类的对象来调用里面的start方法。
小案例:
通过实现Runnable接口,创建线程

        package com.runnable.thread;
        /** @version 2017-9-7 上午9:27:46 */
        public class MyRunnable implements Runnable{
            /**
             * 重写run方法:
             *      线程启动之后会执行run方法
             *      run方法的代码就是线程所要执行的任务*/
            @Override
            public void run(){
                System.out.println("线程启动了");
                System.out.println("线程开始运行了");
            }
        }

测试通过实现接口创建的线程

        package com.runnable.thread;
        /**@version 2017-9-7 上午9:31:58*/
        public class TestMyRunnable {
            public static void main(String[] args){
                MyRunnable myRunnable = new MyRunnable();
                //创建线程对象
                Thread thread = new Thread(myRunnable);
                //启动线程,调用start方法,实际运行run方法
                thread.start();
            }
        }

解析:为什么线程的启动需要通过线程对象.start()( 例如:thread.start() )方法来启动而不是线程所在类的对象.run()( 例如myRunnable.run() )方法来运行线程?因为通过线程对象.start()方法来运行的线程是由启动这个线程的线程来执行,但是通过myRunnable.run()运行的线程是由主线程(main线程)来执行的。
创建线程的方式二:(推荐使用)
[public] class 类名 extends Thread{
//重写run() 方法
}
创建对象: 类名 对象名 = new 类名();
启动线程:对象名.start();
原因: 线程直接继承了Thread类,所以他的对象里面就包含了start方法,所以不需要创建thread类的对象来调用里面的start方法,而是通过”线程对象.start()”可以直接调用里面的方法。
小案例:
通过继承Thread类,创建线程

package com.thread.thread;
/** @version 2017-9-7 上午9:59:03*/
public class MyThread extends Thread{
    //重写run()方法
    //通过Alt+/ 可以提示从父类中继承了那些成员
    //需要注意:不能重写start方法,因为start方法需要为线程开辟空间
    @Override
    public void run() {
        System.out.println("通过继承thread方法执行了");
    }
}

测试通过继承Thread类创建的线程

package com.thread.thread;
public class TestMyThread {
    public static void main(String[] args){
        //创建线程对象
        MyThread thread = new MyThread();
        //启动线程
        thread.start();
    }
}

解析:与上面的解释相同

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值