Java高级篇--进程和线程

1.什么是进程?

2.什么是线程?

3.为什么使用多线程?

4.java如何创建多线程?

1.什么是进程?

进程:正在进行的程序。是系统分配资源基本单元

2.什么是线程?

线程轻量级线程)是进程中的一条执行路径,也就是CPU基本调度单位

多线程:一个程序同一时间执行多个线程。

一个进程由一个或多个线程组成,彼此之间完成的工作不同(任务),同时执行,成为多线程。

--我们写的代码就是单线程的

3.为什么使用多线程?

充分利用cpu,提高程序的效率

生活中的例子:好比一个人可以干好多事情--吃饭、睡觉、学习...

软件例子:wx--视频、聊天、拍照、转账....

3.1设置和获取线程的名称

Thread.currentThread():获取当前线程对象

.getName():获取线程名--默认名称Thread-n,该方法必须在Thread类下才能用

4.java如何创建多线程?

java中提供了三种实现多线程的方式

①继承Thread类

②实现Runnable接口

③实现Callable接口

4.1继承Thread类

语法:继承Thread、重写run方法、创建线程对象、开启线程

结果是同时进行--不分先后顺序,只看再特定条件内任务完成后的结果。

好比多轮抢答一样,每个人要求都有抢答次数,线程结束只要任务完成就好。

package com.wjy;

public class MyThreadAL extends Thread{

    private int tick = 100;
    @Override
    public void run() {
        while (true){
            if (tick>0){
                tick--;
                System.out.println("当前线程对象的名字为:"+Thread.currentThread().getName()+"----剩余:"+tick+"张票");
            }else {
                break;
            }
        }
    }
}


package com.wjy;

public class TestAl01 {
    public static void main(String[] args) {
        MyThreadAL myThreadAL1 = new MyThreadAL();
        myThreadAL1.start();
        MyThreadAL myThreadAL2 = new MyThreadAL();
        myThreadAL2.start();
        MyThreadAL myThreadAL3 = new MyThreadAL();
        myThreadAL3.start();
        MyThreadAL myThreadAL4 = new MyThreadAL();
        myThreadAL4.start();
    }
}

4.2实现Runnable接口

语法:实现Runnable、重写run方法、创建线程对象、开启线程

Runnable runnable = new Runnable();//创建线程任务对象

线程安全:多个线程共享一个资源,导致线程安全隐患。---在后面可以使用锁解决。

超卖多买的现象:好比毒圈,刚开始只有一个人在安全区,这个人已经宣布胜利,但等到最后突然出来一个人也到达安全区,因此两个获胜者(多买),原本只有一个胜利者的情况此时多出了一个(超卖)。

package com.wjy.runnable;

public class MyRunnableAL implements Runnable{
    private int tick = 100;
    @Override
    public void run() {
        while (true){
            if (tick>0){
                tick--;
                System.out.println(Thread.currentThread().getName()+" tick:"+tick);
            }else {
                break;
            }
        }
    }
}


package com.wjy.runnable;

public class Test02 {
    public static void main(String[] args) {
        MyRunnableAL myRunnableAL1 = new MyRunnableAL();
        new Thread(myRunnableAL1,"A").start();
        MyRunnableAL myRunnableAL2 = new MyRunnableAL();
        new Thread(myRunnableAL2,"B").start();
        MyRunnableAL myRunnableAL3 = new MyRunnableAL();
        new Thread(myRunnableAL3,"C").start();
        MyRunnableAL myRunnableAL4 = new MyRunnableAL();
        new Thread(myRunnableAL4,"D").start();
    }
}

4.3继承Thread和实现Runnable哪种方式比较好:

实现Runnable的扩展性更好,也就是说实现Runnable后,还可以继续实现别的接口,

但是继承Thread之后无法继承别的类。

4.4实现Callable接口

语法:实现Callable<数据类型>、重写方法、

创建执行任务类--后封到FutureTask中--封到Thread创建线程类中、开启线程、从futureTask中.get()获取执行结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值