Java进程与线程

进程 :是正在进行的应用程序
线程:是进程中的单个顺序执行流,是一条执行路径

public class MyThreaddemo {
    public static void main(String[] args) {
        MyThread mt1 = new MyThread();
        MyThread mt2 = new MyThread();
        //mt1.run(),mt2.run()
        //void start()导致该线程开始执行,java虚拟机调用此线程的run方法
        mt1.start();
        mt2.start();
    }
}


public class MyThread extends Thread{
    @Override
    public void run() {
        for (int i=0;i<100;i++){
            System.out.println(i);
    }
}
}

多线程的实现方式

1.继承Thread类

为什么要重写run方法?
因为run()方法是用来封装被线程执行的代码
run()方法和start()方法的区别?
run(): 封装线程执行的代码,直接调用,相当与普通方法的调用
start(): 启动线程,然后由JVM调用此线程的run方法

设置和获取线程名称

public class MyThreaddemo {
    public static void main(String[] args) {
        MyThread mt1 = new MyThread("高铁");
        MyThread mt2 = new MyThread("飞机");
        //void setName(String name):将此线程的名称更改为等于参数name
       // mt1.setName("飞机");
       // mt2.setName("高铁");

        mt1.start();
        mt2.start();
        //static Thread currentThread() 返回对当前正在执行的线程对象的引用
       // System.out.println(Thread.currentThread().getName());
    }
}

public class MyThread extends Thread{
    public MyThread(String name){
        super(name);
    }
    @Override
    public void run() {
        for (int i=0;i<100;i++){
            System.out.println(getname()+","+i);
    }
}
}

设置线程优先级

public static void main(String[] args) {
        ThreadPriority mt1 = new ThreadPriority();
        ThreadPriority mt2 = new ThreadPriority();
        //void setName(String name):将此线程的名称更改为等于参数name
        mt1.setName("飞机");
        mt2.setName("高铁");
        //设置优先级
        mt1.setPriority(6);
        mt2.setPriority(10);
        mt1.start();
        mt2.start();
    }
}

线程控制
sleep:使当前正在执行的线程停留几毫秒
join:等待这个线程死亡
setDaemon:守护线程,当运行的都是守护线程,java虚退出

sleep:

public class ThreadSleepdemo {
    public static void main(String[] args) {
        ThreadSleep ts1 = new ThreadSleep();
        ThreadSleep ts2 = new ThreadSleep();
        ThreadSleep ts3 = new ThreadSleep();

        ts1.setName("刘备");
        ts2.setName("曹操");
        ts3.setName("孙权");

        ts1.start();
        ts2.start();
        ts3.start();
    }
}

public class ThreadSleep extends Thread{

    @Override
    public void run() {
        for (int i=0;i<100;i++){
            System.out.println(getName()+","+i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
}
}

join:

public class ThreadJoindemo{
    public static void main(String[] args) throws InterruptedException {
        ThreadJoin tj1 = new ThreadJoin();
        ThreadJoin tj2 = new ThreadJoin();
        ThreadJoin tj3 = new ThreadJoin();

        tj1.setName("康熙");
        tj2.setName("四阿哥");
        tj3.setName("八阿哥");

        tj1.start();
        tj1.join();
        tj2.start();
        tj3.start();

public class ThreadJoin extends Thread{

    @Override
    public void run() {
        for (int i=0;i<100;i++){
            System.out.println(getName()+","+i);

        }
}
}
    }
}

daemon:

public class ThreadJoindemo{
    public static void main(String[] args) throws InterruptedException {

        ThreadDeamon tj2 = new ThreadDeamon();
        ThreadDeamon tj3 = new ThreadDeamon();

        tj2.setName("张飞");
        tj3.setName("关羽");
        //设置主线程为刘备
        Thread.currentThread().setName("刘备");
        //设置守护线程
        tj2.setDaemon(true);
        tj3.setDaemon(true);
        tj2.start();
        tj3.start();
        for (int i=0;i<10;i++){
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }
}

public class ThreadDeamon extends Thread{

    @Override
    public void run() {
        for (int i=0;i<100;i++){
            System.out.println(getName()+","+i);

        }
}
}

在这里插入图片描述
多线程的实现方式
2.实现Runanble接口
在这里插入图片描述

public class MyRunabledemo {
    public static void main(String[] args) {
        //创建MyRunable类的对象
        MyRunable mr = new MyRunable();
        //创建Thread类的对象,把MyRunable的对象作为构造方法参数
        Thread t1 = new Thread(mr,"飞机");
        Thread t2 = new Thread(mr,"高铁");
        //启动线程
        t1.start();
        t2.start();
    }
}

public class MyRunable implements Runnable{
    @Override
    public void run() {
        for (int i=0;i<100;i++){
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zzh1324

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值