关于java多线程
来源:互联网 发布:bet可以测什么数据 编辑:程序博客网 时间:2024/06/11 18:12
进程(process) 概念就不说了......系统可以为一个程序同时创建多个进程。例如,同时打开两个记事本文件。每一
个进程都有自己独立的一块内存空间和一组系统资源,即使同类进程之间也不会共享系统资源。
线程(thread) 就是比进程更小的运行单位。一个进程中可以包含多个线程。与进程不同的是,同类的多线程是共享
一块内存空间和一组系统资源的。每一个程序至少拥有一个线程,成为主线程。当程序加载到内存时
,启动主线程。要加载其它程序,程序就要使用Runnable接口和Thread类。
Runnable接口 Runnable接口只声明了一个run方法。run是线程执行的起点,即在创建并启动一个线程后,系统
自动调用run方法。一个线程对象必须实现run的方法完成线程的所有活动。
Thread类 Thread类将Runnable接口中的run方法实现为空方法,它的声明格式是:
public class Thread extends Object implements Runnable
(1)构造方法
public Thread()
public Thread(String name)
public Thread(Runnable target)
public Thread(Runnable target,String name)
public Thread(ThreadGroup group,Runnable target)
public Thread(ThreadGroup group,String name)
public Thread(ThreadGroup group , Runnable target,String name)
(2)Thread类的静态方法:
public static Thread currentThread() //返回当前执行线程的引用对象
public static int activeCount() //返回当前线程组中活动线程个数
public static enumerate(Thread[] tarray) //将当前线程总的活动线程拷贝到tarray数组中,包括
子线程
(3)Thread类的实例方法
public final String getName() //返回线程名
public final void setName(String name) //设置线程的名字为那么
public void start() //启动已创建的线程对象
public final boolean isAlive() //返回线程是否启动的状态
public final ThreadGroup getThreadGroup() //返回当前线程所属的线程组名
public String toString() //返回线程的字符串信息,包括名字,优先级和线程组
创建线程的两种方法
(1)继承Thread类
由于Thread类的run()方法只是空方法,Thread1类必须覆盖run()方法。
在程序中,线程语句的顺序只决定了线程语句产生的顺序,线程产生后并不立即运行,而是和系统中
的所有其它线程一起等待系统来执行它,这时所有线程执行的机会的均等的,所以这些线程的这些顺序由
系统调度和控制,不由程序决定。
public class Thread1 extends Thread{
private int k=0;
public Thread1(String name,int k){
super(name);
this.k = k;
}
public void run(){
int i = k;
System.out.println();
System.out.println(getName()+": ");
while(i<50){
System.out.println(i+" ");
i+= 2;
}
System.out.println(getName()+" end!");
}
public static void main(String[] args) {
Thread1 t1 = new Thread1("Thread1",1);
Thread1 t2 = new Thread1("Thread2",2);
t1.start();
t2.start();
System.out.println("activeCount="+Thread.activeCount());
}
(2)实现Runnable接口
Rubbable1类只是实现Runnable的接口的一个类,它并不是Thread的子类。Runnable1类的对象
r1虽然带有run()方法的线程体,但其中没有start()方法,所以r1不是以线程对象。
由于Thread类的run()方法是空方法,所以买main()方法中,必须已Runnable1类的对象r1和r2作为
目标对象,构造Thread类的线程t1、t2,之后通过t1.start()启动线程。
public class Runnable1 implements Runnable{
int k=0;
public Runnable1(int k){
this.k = k;
}
public void run(){
int i = k;
System.out.println("");
while(i<500){
System.out.println(i+" ");
i += 2;
}
}
public static void main(String[] args) {
Runnable1 r1 = new Runnable1(1);
Runnable1 r2 = new Runnable1(2);
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t2.start();
t1.start();
}
}
两种创建线程方法的比较
(1)直接继承线程Thread类
该方法编写简单,可以直接操作线程,适用于单重继承情况,因而不能再继承其他类。
(2)实现Runnable接口。
当一个线程已继承了另一个类时,就只能用实现Runnable接口的方法来创建线程,且便于保持程序
风格的一致性。
- 关于JAVA的多线程
- 关于java多线程
- 关于JAVA多线程同步
- 关于JAVA多线程同步
- 关于JAVA多线程同步
- 关于JAVA多线程同步
- 关于JAVA多线程同步
- 关于Java的多线程
- 关于java的多线程
- 关于java多线程
- 关于JAVA多线程同步
- 关于Java多线程小结
- 关于JAVA多线程同步
- 【JAVA基础】关于多线程
- 关于java多线程
- 关于java多线程2
- 关于java多线程
- 关于java多线程
- GetDCEx 和BeginPaint
- 图像保存到XML文件和从XML中取出图像显示
- 苹果公布iPhone 2.0软件及SDK
- bea weblogic workflow worklist 介绍(1)
- 多媒体发布系统(捷先)
- 关于java多线程
- 当Windows Mobile遇上Google Android
- J2EE
- 台湾嵌入式软硬件厂商组建联盟 欲分Gphone一杯羹
- 用JSTL实现JSP应用程序快速开发
- 宽网多媒体发布系统产品简介
- 精彩blog网址
- Xml点滴
- 广角数字媒体播放系统