通过继承Thread实现多线程

用法:

FirstThread类继承Thread类:

// 继承一个Thread类
class FirstThread extends Thread{
	// 覆盖run方法,run方法中就是线程执行的内容
	public void run()
	{
		for(int i = 0 ; i < 100; i++)
		{
			System.out.println("first tread-->" + i);
		}
	}
}



Test类测试结果:

public class Test {

	public static void main(String[] args) {
		
		// 生成线程类的对象,这个对象代表一个线程
		FirstThread ft = new FirstThread();
		// 启动线程,进入就绪状态,不代表马上执行,还要抢占CPU,启动线程不能直接调用run,那就是在主线程中运行了
		ft.start();
		// 这个循环是在主线程中执行,执行后发现两个线程交替运行,而且无规律
		for(int i = 0 ; i < 1200; i++)
		{
			System.out.println("main inread-->" + i);
		}
		
	}

}


通过实现Runnable接口实现多线程

用法:

mRunnable类实现Runnable接口

class mRunnable implements Runnable{
	// 复写run方法,run方法内部是线程执行的内容
	public void run()
	{			
		for(int i = 0 ; i < 1200; i++)
		{
			// Thread的currentThread方法取得当前线程,getName方法是取得线程名
			System.out.println(Thread.currentThread().getName() + i);
		}	
	
	}
}



Test类测试结果:

public class Test {

	public static void main(String[] args) throws InterruptedException {
		
		// 初始化一个mRunnable对象
		mRunnable r =new mRunnable();
		
		// 把mRunnable对象以参数形式传给Thread的构造函数
		Thread t = new Thread(r);
		
		// 启动线程
		t.start();
	}

}



线程的一些常用方法

用法:

public class Test {

	public static void main(String[] args) throws InterruptedException {
		
		// 初始化一个mRunnable对象
		mRunnable r =new mRunnable();
		
		// 把mRunnable对象以参数形式传给Thread的构造函数
		Thread t = new Thread(r);	
		
		// 设置线程优先级优先级从0-10,优先级大的只是被执行的概率大,不绝对
		t.setPriority(10);
		
		// 取得线程的优先级
		int i = t.getPriority();
		
		// 静态方法线程睡眠,以毫秒为单位,睡眠结束后不一定马上执行,还要经过抢占CPU阶段
		Thread.sleep(3000);
		
		// 静态方法让出CPU使用权,开始新一轮抢cpu,也许能在得到,也许别别的线程得到
		Thread.yield();
		
		// 启动线程,线程进入就绪状态开始抢占CPU使用权,得到后执行run方法里面代码
		t.start();
	}

}



简单的线程同步方法

用法:

两个线程所共用的代码

class RunnableIm implements Runnable{
	public void run()
	{	
		/**
		 * synchronized中为同步代码块,this是同步锁对象,A进来执行完所有代码块,锁才开,B才能执行,否则即使B得到CPU
		 * 使用权没有得到锁也得等下去,两个线程共用一个代码块时候为了防止数据不同步时候用。
		 */
		synchronized(this)
		{
			for(int i = 0 ; i < 1200; i++)
			{
				// 得到当前线程的名字
				System.out.println(Thread.currentThread().getName() + i);
			}	
		}
		
	}
}



Test测试结果

public class Test {

	public static void main(String[] args) throws InterruptedException
	{
		// 初始化一个mRunnable对象
		RunnableIm r =new RunnableIm();
		
		// 初始化两个线程
		Thread t1 = new Thread(r);
		Thread t2 = new Thread(r);
		
		//启动两个线程,放入同步代码块的数据不会出现不一致情况
		t1.start();
		t2.start();
	}

}