进程和线程的概述

1. 程序,线程,进程的概念:

程序:编写的静态代码
进程:程序的一次执行的过程。
线程:能在进程中独立完成的子任务。

2 Java实现多线程的两种方法:

继承Thread类
代码:

public class MyThread extends Thread{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        super.run();
        System.out.println("继承Thread的线程:"+Thread.currentThread().getName());

    }
    public static void main(String[] args) {
        MyThread  thread=new MyThread();
        System.out.println("当前运行的线程:"+Thread.currentThread().getName());
        thread.start();
    }

}
################################
运行结果:
当前运行的线程:main
继承Thread的线程:Thread-0

注意:main线程不是主函数的main,而是系统的主线程.

Thread.currentThread:表示的是当前运行的线程。
Thread类其实是实现的Runnable接口的:我们看源码:

public class java.lang.Thread implements java.lang.Runnable {
。。。
}

实现Runnable接口
代码:

public class MyRun implements Runnable{

    public MyRun()
    {
        System.out.println("当前运行的线程:"+Thread.currentThread().getName());
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("实现Runnable接口:"+Thread.currentThread().getName());

    }

}
public static void main(String[] args) {
        MyRun run=new MyRun();
        Thread thread1=new Thread(run);
        Thread thread2=new Thread(run);
        thread1.start();
        thread2.start();
    }
###################################
结果:当前运行的线程:main
实现Runnable接口:Thread-0
实现Runnable接口:Thread-1

Thread类的构造函数:

构造方法摘要
Thread()           分配新的 Thread 对象。
Thread(Runnable target)           分配新的 Thread 对象。
Thread(Runnable target, String name)           分配新的 Thread 对象。
Thread(String name)           分配新的 Thread 对象。
Thread(ThreadGroup group, Runnable target)           分配新的 Thread 对象。
Thread(ThreadGroup group, Runnable target, String name)           分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,并作为 group 所引用的线程组的一员。
Thread(ThreadGroup group, Runnable target, String name, long stackSize)           分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈大小。
Thread(ThreadGroup group, String name)           分配新的 Thread 对象。

两种多线程的创建方式的对比

正如前面讲的Thread类其实是实现Runnable接口,所以对着两者比较我们可以引申为时extends和implements的比较。了解Java的继承和多态的知识就会知道后者好。
原因:第一,Java单一继承,接口可以多种实现。第二,利用接口有利于降低了程序之间的耦合度

线程之间的状态:

枚举常量摘要
BLOCKED           受阻塞并且正在等待监视器锁的某一线程的线程状态。
NEW           至今尚未启动的线程的状态。
RUNNABLE           可运行线程的线程状态。
TERMINATED           已终止线程的线程状态。
TIMED_WAITING           具有指定等待时间的某一等待线程的线程状态。
WAITING           某一等待线程的线程状态。

流程图:
进程和线程的概述

现在我们来讲讲为什么用多线程:

现在的cpu发展迅速,从单核的到多核,这时我们将面临一个问题:如何充分的利用cpu呢?这时多线程的出现解决了这个问题。简单点来说:线程可以有效地降低程序的开发和维护等成本,同时提升复杂应用程序的性能。
具体的来说:

  • 1.发挥多处理器的强大功能
  • 2.在单处理器系统上获得更高的吞吐量
  • 3 建模的简单性
  • 4 异步事件的简化处理

猜你喜欢

转载自blog.51cto.com/12666319/2132505