A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 2018-4-25 15:57 编辑

多线程_介绍及使用

        主方法main()是单线成的

* 多线程:
*
* 进程:当前正在运行的程序,一个应用程序在内存中的执行区域
* 线程:进程中的一个执行控制单元,执行路径
*
* 一个进程可以有一个线程,也可已有多个线程
*
* 单线成:安全性高,但是效率低
* 多线程:安全性低,但效率高
*
* 多线程案例:360,迅雷等.

------------------------------------------------------

* 两种创建线程的方式:
*                 1.继承Thread类创建线程
*                 2.实现Runnable接口创建线程

------------------------------------------------------
>>>>>>  线程创建方式 1 <<<<<<<<<<

/*
* 多线程的实现方式:
*                 方式1:一种方法是将类声明为Thread 的子类.该子类应重写Tread 类的run方法.接下来可以分配并启动该子类的实例.
*                            四部   1继承Tread--->2 重写run()方法--->3创建线程对象--->4调用start()方法,启动线程
*                 
* Thread
*                <通过对象调用该方法>         
*                 String getName()   返回该线程的名称
*                 <在方法内调用>
*                 void setName(String name) 改变线程名称,使之与参数name相同.
*
* CPU执行程序的随机性
*                 1.多线程不是同时执行的,线程启动以后,CPU会在多个进程的多个线程之间来回切换执行,不是同时执行的.
*                 2.多线程效率高的原因:
*                                 线程多的进程被执行的几率就大,所以多线程比单线程效率高.
*
*/
package com.jobday11;

public class 多线程的实现方式 {

        public static void main(String[] args) {
                //创建线程实例
                MyThread mt = new MyThread();
                //启动线程
                mt.start();
                mt.setName("苹果");
                System.out.println("------------");
                //启动第二个线程
                MyThread mt2 = new MyThread();
                mt2.start();
                mt2.setName("橘子");
        }

}
//创建一个类继承线程类
class MyThread extends Thread {
        //重写run()方法
        @Override
        public void run(){
                for(int i=0;i<100;i++){
                        System.out.println(getName()+"--"+i);//getName()获取线程名称
                }
        }
}
---------------------------------------------------------
>>>>>>  线程创建方式 2 <<<<<<<<<<

package com.jobday11;
/*
* 两种创建线程的方式:
*                 1.继承Thread类创建线程
*                 2.实现Runnable接口创建线程
*
* 多线程实现方式 2:
*                         创建线程的另一种方法是:
*                         1.声明实现Runnable 接口的类;
*                         2.该类然后实现run方法.
*                         3.创建该类的实例.
*                         4.创建Tread时将实现Runnable的类作为参数来传递
*                         5.启动线程
*
* Thread 的静态方法:
*                         static Thread currentThread()
*              //返回对当前正在执行的线程对象的引用。
*              //然后通过返回的线程对象来调用getName()方法,获取线程名字
*
*         既然有了继承Tread类来创建线程,那为何还要定义一个Runnable接口来创建线程?
*                         原因:
*                                 类是但继承的,如果类继承了Tread,就不能继承其它的类了
*
* 下边案例中展现了第二种创建线程的方式:
*                 1.可以公用Runnable子类对象
*                 2.也可以不共用Runnable子类对象
*
*/
//创建实现Runnable接口的类
class MyThread1 implements Runnable{
        int num;
        //构造方法
        public MyThread1(int num){
                this.num = num;
        }
        @Override
        public void run() {
                for(int i=0;i<100;i++){
                        System.out.println(Thread.currentThread().getName()+"--"+i+"--"+this.num);
                        
                }
        }
}
//测试类
public class 多线程的实现方式_2 {
        public static void main(String[] args) {
//                方式02_01();  //不共用Runnable子类对象的方法
               
                方式02_02();  //公用Runnable子类对象的方法
        }

        //公用Runnable子类对象的方法
        private static void 方式02_02() {
                //创建Runnable实现类的对象
                MyThread1 mt = new MyThread1(100);
                //将该对象最为参数传给Tread的构造
                Thread t = new Thread(mt);
                t.setName("苹果");
                //启动线程
                t.start();
               
                //创建第二个线程
                Thread t2 = new Thread(mt);
                t2.setName("香蕉");
                t2.start();
        }
        //不共用Runnable子类对象的方法
        private static void 方式02_01() {
                //创建Runnable实现类的对象
                MyThread1 mt = new MyThread1(100);
                //将该对象最为参数传给Tread的构造
                Thread t = new Thread(mt);
                t.setName("苹果");
                //启动线程
                t.start();
               
                //创建第二个线程
                MyThread1 mt2 = new MyThread1(200);
                Thread t2 = new Thread(mt2);
                t2.setName("香蕉");
                t2.start();
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马