JAVA线程基础

今天刚刚讲到java中的线程,随便也就复习下今天的知识。

 在我们学习线程之前所写的类,都是单线程的类,线程是控制线程的简写(thread of control)。

线程是一个程序中与其他线程无关的能独立运行的代码片段。控制了线程在程序中运行的路径,也就控制了执行的代码。Java 多线程编程其实并不象大多数的书描述的那样简单,所有关于UI(用户界面)的Java编程都要涉及多线程。正如下午刘老提到,在做游戏项目是对线程的处理更为复杂,困难。

 想让对象具有多线程的功能,只要继承java.lang.Thread类或者是实现java.lang.Runnable接口。

 一个线程是进程中的一个执行流程。一个进程中可以同时包括多个线程。也就是说,一个程序中同时可能进行多个不同的子流程,每个子流程可以得到一小段程序的执行时间,每执行完一个线程就跳到下一个线程。由于转换的速度很快,这使得一个程序可以像是同时处理多个任务。

 在java中要实现线程功能,可以继承java.lang.Thread类,并重新定义run()方法,之后实例化自定义的Thread类,接着使用start()方法启动线程。

 下面是一个继承Thread类来获得线程的例子:

  

package  com.lovo.test;

 
public   class  TwoThread  extends  Thread  {

       
/**

        * 
@param args

        
*/
/覆盖run(),线程从run()开始执行,同时并发执行

       
public void run()

       
{

              
for(int i=0;i<10;i++){

                     System.out.println(
"New thread");

              }


       }


       
public static void main(String[] args) {

              
// TODO 自动生成方法存根

              TwoThread tt
=new TwoThread();

              tt.start();
//启动线程

              
for(int i=0;i<10;i++){

                     System.out.println(
"Main thread");

              }


       }


}


 由于java 是单继承,假如一个类继承了Thread类,那么就不能继承其他类了,

可以实现java.lang.Runnable接口来定义具有线程功能的类,Runnable接口中定义一个run()方法来实现,在实例化一个Thread对象时,可以传入一个实现Runnable接口的对象作为变量。Thread对象会调用Runnable对象的run()方法,进而执行其中所定义的流程。

下面是一个实现java.lang.Runnable接口来定义具有线程功能的类:

  

package  com.lovo.test;

 
class  MyThread  implements  Runnable {

       
int count;

       Thread thrd;

       MyThread(String name)

       
{

              thrd
=new Thread(this,name);

              count
=0;

              thrd.start();

       }


       
public void run()

       
{

              System.out.println(thrd.getName()
+"Staring");

              
try

              
{

                     
do{

                            Thread.sleep(
1500);

                            System.out.println(
"In"+thrd.getName()+",count is"+count);

                            count
++;

                     }
while(count<10);

              }


              
catch(InterruptedException exc)

              
{

                     System.out.println(thrd.getName()
+"interrupted");

              }


              System.out.println(thrd.getName()
+"terminating ");

       }


       
public static void main(String[] args) {

              System.out.println(
"main thread star");

              
new MyThread("线程1");

              
new MyThread("线程2");

              
new MyThread("线程3");

       }


}


 线程具有优先权,由1(Thread.MIN_PRIORITY)到10(Thread.MAX_PRIORITY),默认是5(Thread.NORM_PRIORITY)。可以使用Thread的setPriority()方法来设定线程的优先权,设定必须在1到10之间,否则会抛出异常java.lang.IllegalArgumentException

优先权高的线程会先被执行完毕,然后才会轮到优先权低的线程。如果优先权相同,则轮流执行。假如你用的是双核的电脑,情况又不一样了,由于CPU在处理方式是抢占式,也就是当一个CPU占用的资源较少时,会抢先执行线程。

下面是一个关于线程优先权的例子,放在双核的机器上会有不同的输出:

  

package  com.lovo.test;

 
public   class  PriorityDemo  implements  Runnable{

       Thread thrd;

       PriorityDemo(String name){

              thrd
= new  Thread( this ,name);

       }

       
public   void  run()

       {

              System.out.println(thrd.getName()
+ " 已经启动 " );

              System.out.println(thrd.getName()
+ " 已经停下 " + " " );

       }

       
public   static   void  main(String[] args) {

              
//  TODO 自动生成方法存根

              PriorityDemo mt1
= new  PriorityDemo( " 低优先级的线程 " );

              PriorityDemo mt2
= new  PriorityDemo( " 高优先级的线程 " );

              mt1.thrd.setPriority(Thread.NORM_PRIORITY
- 2 );

              mt2.thrd.setPriority(Thread.NORM_PRIORITY
+ 2 );

              mt1.thrd.start();

              mt2.thrd.start();

       }

}

 

 回顾了下今天所讲的线程内容,也许有地方不是很详细,但后面还要讲到更多关于线程的知识。比如说线程的加入,线程的停止,线程的同步和线程的安全等。

不写了,0点过了 。^_^

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值