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 异步事件的简化处理
原文地址:http://blog.51cto.com/12666319/2132505
时间: 2024-10-13 21:22:09