Java多线程

  Java多线程是核心Java的重要构成部分之一。很多时候,我们需要接受多种任务并及时给予处理,这实际上就是一种并发性行为。而Java多线程就可以很好地实现这种并发性行为。本文就是探讨Java的多线程内容,包括线程是什么?如何创建线程?如何应用线程?线程之间的状态如何转换?等。

   线程,是操作系统里面一个很重要的概念。说到线程,就有必要提及进程。那么什么是进程呢?什么又是线程呢?进程与线程之间有何差异呢?进程是具有一定独立功能的程序关于某个数据集合的一次运行活动,它是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,并且它基本上不拥有系统资源,只拥有一点在运行中比不可少的资源,但是它可以与同属一个进程的其他线程共享进程所拥有的全部资源。简而言之,一个程序至少有一个进程,一个进程至少有一个线程。进程和线程的主要差别在于他们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

   Java中创建线程:

   方法一,设计一个java.lang.Thread类的子类,覆盖Thread类的run()方法,然后创建该类的实例。

   方法二,设计一个实现Runnable接口的类,实现它的run()方法,然后把这个类的实例作为Thread的构造器的参数,创建Thread类的实例。

   Java中启动线程:

   通过调用start ()方法启动线程。

  Java中运行线程:

  JVM自动调用sun()方法执行线程。

  为了理解这两种创建线程的方法,请阅读如下代码。

  代码一:

package com.jieke.thread;

/**
 * Description:利用方法一创建线程
 * @author Wang Luqing
 * @version 1.0
 */	
public class SubThread extends Thread
{
   String str = "好好学习,天天向上。";
   public void run()
   {
      for (int i=0;i<2;i++)
      {
         try
         {
         	Thread.sleep(100);//休眠100毫秒
         }
         catch(Exception e)
         { 
            e.printStackTrace();
          }
       System.out.println(Thread.currentThread().getName()+" "+str);
      }
   }
   public static void main(String[] args)
   {
      SubThread t1=new SubThread();
      t1.start();
    }
}

代码二:

package com.jieke.thread;

/**
 * Description:利用方法二创建线程
 * @author Wang Luqing
 * @version 1.0
 */	
public class SubRunnable implements Runnable
{
   String str = "好好学习,天天向上。";
   public void run()
   {
      for (int i=0;i<2;i++)
      {
         try
         {
         	Thread.sleep(100);//休眠100毫秒
         }
         catch(Exception e)
         { 
            e.printStackTrace();
          }
       System.out.println(Thread.currentThread().getName()+" "+str);
      }
   }
   public static void main(String[] args)
   {
      SubRunnable sr=new SubRunnable();
      Thread t1 = new Thread(sr);
      t1.start();
    }
}

代码一和代码二,针对相同的问题,采用不同地创建线程的方法来求解问题。

关于如何应用Java多线程,首先要分析问题是否具有多线程需求,接下来就是创建多线程和调配多线程工作关系,让多线程能够协同工作,既提高工作效率,又保持正确的工作逻辑。Java的多线程应用很是广泛,毕竟现实生活中的很多问题都具备多线程需求,因而,在解决此类问题的时候,要格外注意多线程之间的协调和关联。

线程之间的状态由创建、就绪、运行、阻塞和死亡5个状态构成。

创建状态:使用new运算符创建一个线程后,该线程处于创建状态。

就绪状态:用start()方法启动一个线程后,系统为该线程分配除处理机外的所有资源,线程就进入就绪队列排队,等待处理机制调度。

运行状态:轮到线程占用CPU资源时,JVM将CPU使用权切换给该线程,该线程就可以开始自己的生命周期。

阻塞状态:正在运行的线程让出CPU使用权,JVM将CPU资源切换给其它线程。阻塞主要有休眠阻塞、等待阻塞、互斥阻塞和其它阻塞等。

死亡状态:线程运行结束后进入死亡状态。

总结:

1)利用Java多线程机制时,一要注意多线程特性,二要清楚业务逻辑。

2)Java多线程实际应用时,具有线程各个状态以及状态的变迁,从而确保在合适的状态完成合适的事务。

 

 

 


 


 

  

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值