Java多线程机制(一)

1.线程在基本概念

1)        线程是一个程序内部的顺序控制流。简单说线程就是程序中执行的路径。

2)        进程的理解就是程序运行的主线程,也就是即将要开始运行的线程。

3)        线程和进程的区别:

a)        每个进程都有独立代码和数据空间(进程上下文),进程间的切换会有较大的开销。

b)        线程可以看成是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小。

c)        多进程:在操作系统中能同时运行多个任务(程序)。

d)        多线程:在同一个应用程序中有多个顺序流同时执行。

4)        Java的线程是通过java.lang.Thread类来实现的。

5)        VM启动时会有一个由主方法(publicstatic void main(){})所定义的线程。

6)        可以通过创建Thread的实例来创建新的线程。

7)        每个线程都是通过某个特定Thread对象对应的方法run()来完成其操作的,方法run()称为线程体。

8)        通过调用Thread类的start()方法来启动一个线程。

2.基本的线程机制

2.1定义任务

    线程可以驱动任务,因此你需要一种描述任务的方式,这可以由Runnable接口提供。要想定义任务,只需要实现Runnable接口并编写run()方法,使得任务可以执行你的命令。

class Runner1 implements Runnable
{

	@Override
	public void run()
	{
		for (int i = 0; i < 100; i++)
		{
			System.out.println("Runner1 : " + i);
		}
		
	}
	
}

2.2Thread类

Thread类的使用有两种:

1)        可以定义一个Thread的子类并重写其run方法如:

class MyThread extends Thread

{

                  public void run{….}

}

2)        将Runnable对象转换为工作任务的传统方式是把它提交给一个Thread构造器。如:

Thread t = new Thread(Runnable r);

2.2.3创建线程例子

    下面我们创建的例子,主要是继续Thread类的线程,和实现Runnable接口的线程。这里笔者强调的是,能够使用实现接口实现的尽量使用接口。当然这两中方式都需要我们去重写run的方法。只是有点不一样的是,使用Runnable的接口,如果你没有new Threade,将Runnable对象放入Thread中,那个只是方法调用,也就是依然在一条的线程上调用。而如果我们使用到Thread类,说明我们告诉CPU开启一条新的线程,这个时候CPU依然是单线程运行,只是CPU线程或快速切换多个新创建的线程之间,就好像是多线程在运行。

package com.owen.thread;

/**
 * 同步线程与异步线程应用
 * @author OwenWilliam 2016-7-21
 * @since
 * @version v1.0.0
 *
 */
public class TestThread1
{

	public static void main(String[] args)
	{
		Runner1 r = new Runner1();
		//使用该方法是线程方法,只会执行好了r.run()方法之后才会执行下一个线程
		//r.run();
		//开启一个新的线程,执行这个线程,其它线程也可以执行,也就是一起执行
		Thread t = new Thread(r);
		t.start();
		
		
		for (int i = 0; i < 100; i++)
		{
			System.out.println("Main Thread : ------" + i);
		}
	}

}

/**
 * 创建一个Runner1引用 Runnable的接口,重写run方法
 * 提倡使用Runnable接口
 * @author OwenWilliam 2016-7-21
 * @since
 * @version v1.0.0
 *
 */
class Runner1 implements Runnable
{

	@Override
	public void run()
	{
		for (int i = 0; i < 100; i++)
		{
			System.out.println("Runner1 : " + i);
		}
		
	}
	
}

/**
 *  创建Runner2继承Thread,调用:
 * Runner2 r = new Runner2();
 * r.start();
 * 执行与 Thread t = new Thread(r);
		t.start();
	一样
 * @author OwenWilliam *
 */
class Runner2 extends Thread
{

	@Override
	public void run()
	{
		for (int i = 0; i < 100; i++)
		{
			System.out.println("Runner2 : " + i);
		}
		
	}
	
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值