JAVA多线程学习笔记什么是线程

【进程与线程】

1、操作系统在执行一个程序时,会自动建立一个‘进程’,这个进程中,至少包含一个线程(这个线程被称为主线程),来作为程序入口。

2、操作系统运行中,会产生很多个‘进程’,这些进程不共享内存;而每个进程占有的内存,却可以被这个进程中不同的‘线程’所共享;另外,这些线程不仅共享这段内存,每个线程还可有一个属于它自己的内存空间——线程栈,这是线程建立时,操作系统分配的,用来保存线程数据。

3、线程总是属于某个进程,进程中的多个线程共享进程的内存。

4、进程被分为多个线程后,这些线程可以并发执行(并不是真正意义上的并发,而是线程调度造成的假象,详情参考相关操作系统教程)。


【JAVA线程】

1、由于Java是纯面向对象语言,因此,Java的线程模型也是面向对象的,Java通过Thread类将线程所必须的功能都封装了起来。

2、如果想运行自己的线程执行函数,那就要覆盖Thread类的run方法,即,继承Thread类,重写类里面的run()方法,run()里面写你要执行的代码。如下:

public class MyThread extends Thread
{
	
	public void run()
	{
		
         //你的代码
		
	}
}

3、执行的时候,实例化MyThread,然后调用start()方法;start方法负责建立线程,调用start方法后,如果线程建立成功,会自动调用Thread类的run方法,即开始执行你的代码。如下:

public static void main(String[] arg0)
{
	MyThread myThread = new MyThread();
        myThread.start();
}

4、除了Thread类,还有一个标识某个Java类是否可作为线程类的接口Runnable,这个接口只有一个抽象方法run,也就是Java线程模型的线程执行函数。一个线程类的唯一标准就是这个类是否实现了Runnable接口的run方法,也就是说,拥有线程执行函数的类就是线程类。


5、通过继承Thread类来建立线程,虽然在实现起来更容易,但由于Java不支持多继承,如果这个线程类继承了Thread,就不能再继承其他的类了。因此,Java线程模型提供了通过实现Runnable接口的方法来建立线程,这样线程类可以在必要的时候继承和业务有关的类,而不是Thread类。

6、Runnable例子:

public class MyThread implements Runnable
{
	public void run()
	{
		//your code
	}	
}

public static void main(String[] args) { 
	
	MyThread myThread1 = new MyThread(); 
	MyThread myThread2 = new MyThread(); 

    Thread t1 = new Thread(myThread1); 
    Thread t2 = new Thread(myThread2); 

    t1.start(); 
    t2.start(); 
} 


【Thread类的构造方法】

1、在使用Runnable接口时需要建立一个Thread实例,因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。Thread类的构造方法被重载了八次,构造方法如下:

public Thread();
public Thread(Runnable target);
public Thread(String name);
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);
public Thread(ThreadGroup group, Runnable target, String name, long stackSize);


Runnable target

实现了Runnable接口的类的实例。要注意的是Thread类也实现了Runnable接口,因此,从Thread类继承的类的实例也可以作为target传入这个构造方法。

String name

线程的名子。这个名子可以在建立Thread实例后通过Thread类的setName方法设置。如果不设置线程的名子,线程就使用默认的线程名:Thread-NN是线程建立的顺序,是一个不重复的正整数。

ThreadGroup group

当前建立的线程所属的线程组。如果不指定线程组,所有的线程都被加到一个默认的线程组中。关于线程组的细节将在后面的章节详细讨论。

long stackSize

    线程栈的大小,这个值一般是CPU页面的整数倍。如x86的页面大小是4KB。在x86平台下,默认的线程栈大小是12KB


2、在调用start方法前后都可以使用setName设置线程名,但在调用start方法后使用setName修改线程名,会产生不确定性。



Reference:

http://www.blogjava.net/nokiaguy/archive/2009/03/07/258358.html         李宁的极乐世界-JAVA多线程初学者指南


你可能感兴趣的:(java)