java中的多线程

s1.基本定义
1.1进程:正在进行中的程序。其实就是一个应用程序运行时的内存分配空间;
1.2线程:又称为轻型进程,是分配资源和程序运行的最小单位。进程负责的就是应用程序的空间标示,而线程负责的是应用程序的执行顺序。

线程的划分小于进程,线程隶属于某个进程。 进程是程序的一种动态形式,是CPU、内存等资源占用的基本单位,而线程是不能占有这些资源的。 进程之间相互独立,通信比较困难,而线程之间共享一块内存区域,通信比较方便。 进程在执行的过程中,包含比较固定的入口,执行顺序,出口,而线程的这些过程会被应用程序所控制。

2.在Java语言中,多线程是的机制是通过虚拟CPU实现的;通过java.lang.Thread类可以实现虚拟CPU的功能。

  1. 返回当前线程的名称的方法:Thread.currentThread().getName()、
  2. 线程的名称是由:Thread-编号定义的。编号从0开始;
  3. 线程要运行的代码都要统一存放在run()方法中。
  4. 指定start()方法开启线程(1.启动了线程 2.让JVM调用了run()方法)

3.实现多线程的方法
1.继承Thread类
2.实现Runnable接口
3.使用Executor框架来创建线程池
4.实现Callable接口

1.继承Thread类
这里写图片描述

package dong.test;

public class Test extends Thread{
    Test(String name){
        super(name);
    }

    @Override
    public void run() {
        for(int i=10;i>0;i--){

            try {
                System.out.println("left time:"+i);
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                System.out.println(e.getMessage());
            }
        }
        System.out.println("game is over!");
    }

    public static void main(String[] args){
        Test test = new Test("Thread Test");
        test.start();//启动线程
    }

}

运行结果:

left time:10
left time:9
left time:8
left time:7
left time:6
left time:5
left time:4
left time:3
left time:2
left time:1
game is over!

2.实现Runnable接口

package dong.test;

public class Test implements Runnable{

    @Override
    public void run() {
        for(int i=10;i>0;i--){

            try {
                System.out.println("left time:"+i);
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                System.out.println(e.getMessage());
            }
        }
        System.out.println("game is over!");
    }

    public static void main(String[] args){
        Test test = new Test();//创建一个线程类实例
        Thread thread = new Thread(test);//以上面创建的线程类实例创建一个Thread实例
        thread.start();//启动线程
    }

}

运行结果:

left time:10
left time:9
left time:8
left time:7
left time:6
left time:5
left time:4
left time:3
left time:2
left time:1
game is over!


代码1

package dong.test;

public class TheadTest {
    public static void main(String[] args) {
        Runnable runner = new Runnable() {
            @Override
            public void run() {
                System.out.println("foo");
            }
        };

        Thread t = new Thread(runner);
        t.start();
        //t.run();
        System.out.println("boo");
    }
}

1.运行结果:

boo
foo

代码2

package dong.test;

public class TheadTest {
    public static void main(String[] args) {
        Runnable runner = new Runnable() {
            @Override
            public void run() {
                System.out.println("foo");
            }
        };

        Thread t = new Thread(runner);
//      t.start();
        t.run();
        System.out.println("boo");
    }
}

2.运行结果:

foo
boo

调用start()方法后,线程会被放到等待队列中,等待CPU的调度,并不一定马上开始执行,只是将这个线程置于就绪(Runnable)的状态;然后通过JVM分配CPU执行时间,此时线程Thread才会调用run()方法。

代码2中是手动调用run()方法;这样和调用普通的方法没有什么区别;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值