多线程(一)

基本概念

进程:有独立的内存空间,进程中的数据存放空间(堆空间和栈空间)是独立的,至少有一个线程。
线程:堆空间是共享的,栈空间是独立的,线程消耗的资源也比进程小,相互之间可以影响的,又称为轻型进程或进程元。

一.线程建立

import java.io.IOException;

/**
 * @Auther: guguda
 * @Date: 2019/4/18 15:34
 * @Description:
 */

    //在java中开启进程:
public class ProcessDemo {
    public static void main(String[] args) throws IOException {
        //方法一:使用Runtime类的exec()方法
        Runtime rt = Runtime.getRuntime();
        rt.exec("notepad");

        //方法二:ProcessBuilder的start()方法
        ProcessBuilder pb = new ProcessBuilder("");
        pb.start();


    }
}

二.进程建立

package com.threaddemo;

/**guguda
 * @Auther: Administrator
 * @Date: 2019/4/18 15:46
 * @Description:
 */
public class ThreadDemo {
    public static void main(String[] args) {
            download();
    }
    public static void download(){

        for (int i = 0; i <= 100; i++) {
            System.out.println("正在下载..."+i+"%");
        }
    }


    public static void play(){
        for (int i = 0; i <= 100; i++) {
            System.out.println("正在播放..."+i+"%");
        }

    }
}

三.多线程的建立

方式1:继承Thread类;
方式2:实现Runnable接口;

线程类(java.lang.Thread): Thread类和Thread的子类才能称之为线程类. 阅读API.
别忘了主线程(mainf方法运行,表示主线程).


方式1:继承Thread类:

步骤:
1):定义一个类A继承于java.lang.Thread类.
2):在A类中覆盖Thread类中的run方法.
3):我们在run方法中编写需要执行的操作---->run方法里的,线程执行体.
4):在main方法(线程)中,创建线程对象,并启动线程.
创建线程类对象: A类 a = new A类();
调用线程对象的start方法: a.start();//启动一个线程


注意:千万不要调用run方法,如果调用run方法好比是对象调用方法,依然还是只有一个线程,并没有开启新的线程.

代码演示

package com.threaddemo;

/**
 * @Auther: guguda
 * @Date: 2019/4/18 16:14
 * @Description:
 */
public class ThreadmannyDemo {
    public static void main(String[] args) {
        play play = new play();
        download download = new download();
        //这里不能写成run
        play.start();
        download.start();

    }
}

    class play extends Thread{
        @Override
        public void run() {
           for(int i=0;i<1000;i++){
               System.out.println("正在播放..."+i+"%");
           }
        }
    }

    class download extends Thread{
        @Override
        public void run() {
            for(int i=0;i<1000;i++){
            System.out.println("正在下载..."+i+"%");
        }
    }
}
方式2:实现Runnable接口

步骤:
1):定义一个类A实现于java.lang.Runnable接口,注意A类不是线程类.
2):在A类中覆盖Runnable接口中的run方法.
3):我们在run方法中编写需要执行的操作---->run方法里的,线程执行体.
4):在main方法(线程)中,创建线程对象,并启动线程.
创建线程类对象: Thread t = new Thread(new A());
调用线程对象的start方法: t.start();


代码演示
/**
 * @Auther: guguda
 * @Date: 2019/4/18 16:26
 * @Description:
 */
public class RunnableDemo {
    public static void main(String[] args) {
        Download1 download = new Download1();
        play1 play = new play1();
        Thread thread1 = new Thread(download);
        Thread thread2= new Thread(play);
        thread1.start();
        thread2.start();


    }
}
class Download1 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i <= 100; i++) {
        System.out.println("正在下载..."+i+"%");
        }
    }
}

class play1 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i <= 100; i++) {
            System.out.println("正在播放..."+i+"%");
        }
    }
}

方式3:匿名内部类来创建线程

只适用于某个类只能用一次的情况

/**
 * @Auther: guguda
 * @Date: 2019/4/18 20:05
 * @Description:
 */
public class AnnounceThreadDemo {
    public static void main(String[] args) {
        for(int i=0;i<=100;i++){
            System.out.println("正在下载..."+i+"%");
            if(i==10){
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        for(int j=0;j<=100;j++){
                            System.out.println("正在播放..."+j+"%");
                        }
                    }
                }).start();
            }

        }
    }
}

不要忘记,我们的main()方法也是一个线程,所以我们同样可以在main方法中模拟一个线程,先下载10次,当10后,我们启动播放的线程,再让程序双线程交替执行。同样,还可以使用Thread类来创建


方式四:用Thread类实现多线程
public class MainThreadDemo {
    public static void main(String[] args) {
        for(int i=0;i<=100;i++){
            System.out.println("正在下载..."+i);
                if(i==10){
                    new Thread(){
                        @Override
                        public void run() {
                            for(int j=0;j<=100;j++){
                                System.out.println("正在播放..."+j);
                            }
                        }
                    }.start();
                }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值