java中的多线程

来源:互联网 发布:sql注入测试工具有哪些 编辑:程序博客网 时间:2024/06/17 20:47

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()方法;这样和调用普通的方法没有什么区别;

原创粉丝点击