点击打开链接--------android培训、java培训、期待与您交流!-----------
一、Java语言的多线程需要操作系统的支持,以前古老的DOS操作系统(V 6.22)是单任务的还没有线程的概念,目前使用的一些操作系统大多都是多任务操作系统支持多线程。
进程的概念:
进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。例如在Windows系统中,一个运行的exe就是一个进程。
线程的概念:
线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。
扩展:
“同时”执行是人的感觉,大家都知道CPU有个时钟周期,在每一秒内只能干一件事,所以线程之间实际上轮换执行。
二、Java中的线程
Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是以线程来运行。每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新Thread
对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。同时JVM也负责线程的调度。线程调度是值按照特定的机制为多个线程分配CPU的使用权。调度的模式有两种:分时调度和抢占式调度。分时调度是所有线程轮流获得CPU使用权,并平均分配每个线程占用CPU的时间;抢占式调度是根据线程的优先级别来获取CPU的使用权。JVM的线程调度模式采用了抢占式模式
在Java中,多线程的实现有两种方式:
1. 扩展java.lang.Thread类
class Demo extends Thread
{
public void run()
{
for(int i=0;i<5;i++)
System.out.println(“demo run:”+i);
}
}
class ThreadDemo
{
Public static void main()
{
Demo d=new Demo();//创建好一个线程
d.start();//开启线程并执行相应的run()方法
d.run();//仅仅是对象调用方法,而线程创建了并没有执行。
for(int i=0;i<10;i++)
System.out.println(“Hello word:”+i);
}
}
注:覆盖run方法的原因是存储该线程要运行的代码。
2、实现java.lang.Runnable接口
步骤:
1、定义类实现Runnable接口
2、覆盖Runnable接口中的run方法,将线程要运行的代码存放在该run方法中。
3、通过Thread类建立线程对象。
4、将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
5、调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
Class num implements Runnable
{
Private int num=100;
Public void run()
{
While(true)
{
If(num>0)
{
System.out.println(Thread.currentThread().getName()+”----”+num--);
}
}
}
}
Class NumDemo
{
Public static void main()
{
num n=new num();
Thread t1=new Thread(n);
Thread t2=new Thread(n);
Thread t3=new Thread(n);
Thread t4=new Thread(n);
t1.start();
t2.start();
t3.start();
t4.start();
}
}