每个Java程序至少有一个线程——主线程。当一个Java程序启动时,JVM会创建主线程,并在该线程中调用程序的main()方法。线程可以理解为“程序内部一个独立的运行单位”。相对于前面尝过的单线程程序,多线程可以让多个调用并行执行,能大大的减少时间的消耗。
进程与线程的区别:简单的说,一个应用程序就是一个进程,而线程是一个进程内部的多个单位;最大的区别是:进程间的内部数据和状态都是完全独立的,而同一进程中的多个线程是共享一块内存空间和一组系统资源的,在程序内部通过对象方法是可以互相调用的,而进程间通信大多数情况是必须通过网络实现的;另外,线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以纯种的切换比进程切换的负担要小。
继承Thread类实现线程:重写Thread类的run()方法,在run()方法中编写你的线程要实现的调用,然后创建该子类的实例,调用其start()方法启动线程;值得注意的是:一个线程对象是从它的run()方法开始执行的,线程对象的启动必须调用其start()方法,start方法吸是启动线程,所以它会马上返回!并不需要等待线程执行完毕。意味着main()方法(所在的线程)已执行完毕,而它所启动的线程还在运行中。
/**
* 统计线程,继承Thread
* @author Administrator
*
*/
public class Count extends Thread{
int num;
//设置构造方法用于传递参数,因为run()方法不能传参
public Count(int num){
this.num = num;
}
/**
* 重写run()
*/
@Override
public void run(){
countUtil();
}
/**
* 统计方法
*/
public void countUtil(){
int i=0;
while(i<1000){
i++;
System.out.println(num+"正在统计"+i);
}
}
public class CountThread{
public static void main(){
//创建线程对象
for(int i=0;i<50;i++){
CountThread ct=new CountThread();
ct.start();//启动线程
}
}
}
}
进程与线程的区别:简单的说,一个应用程序就是一个进程,而线程是一个进程内部的多个单位;最大的区别是:进程间的内部数据和状态都是完全独立的,而同一进程中的多个线程是共享一块内存空间和一组系统资源的,在程序内部通过对象方法是可以互相调用的,而进程间通信大多数情况是必须通过网络实现的;另外,线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以纯种的切换比进程切换的负担要小。
继承Thread类实现线程:重写Thread类的run()方法,在run()方法中编写你的线程要实现的调用,然后创建该子类的实例,调用其start()方法启动线程;值得注意的是:一个线程对象是从它的run()方法开始执行的,线程对象的启动必须调用其start()方法,start方法吸是启动线程,所以它会马上返回!并不需要等待线程执行完毕。意味着main()方法(所在的线程)已执行完毕,而它所启动的线程还在运行中。
/**
* 统计线程,继承Thread
* @author Administrator
*
*/
public class Count extends Thread{
int num;
//设置构造方法用于传递参数,因为run()方法不能传参
public Count(int num){
this.num = num;
}
/**
* 重写run()
*/
@Override
public void run(){
countUtil();
}
/**
* 统计方法
*/
public void countUtil(){
int i=0;
while(i<1000){
i++;
System.out.println(num+"正在统计"+i);
}
}
public class CountThread{
public static void main(){
//创建线程对象
for(int i=0;i<50;i++){
CountThread ct=new CountThread();
ct.start();//启动线程
}
}
}
}