关于线程的简单介绍

     线程的基本概念:
     是一个程序的多个执行路径,执行调度的单位,依托于进程存在。 
线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间也叫做线程栈,是在建立线程时由系统分配的,主要用来保存线程内部所使用的数据,如线程执行函数中所定义的变量。
    注意:    
   Java中的多线程是一种抢占机制而不是分时机制
   抢占机制指的是有多个线程处于可运行状态,但是只允许一个线程在运行,他们通过竞争的方式抢占CPU。

   线程的定义(Defining):---(在定义线程的时候,一般用到两种基本的方式)

   1.继承Java.lang.Thread类

     /*使用继承Java.lang.Thread的方式来创建一个线程
            public class ThreadTest extends Thread{



        /*重写(OverRead)Run()方法,JVM会自动调用该方法

          public void run(){
              System.out.println("我是一个线程!、I`m Running!");
              }

       }

   注意:
          重写Run()方法在该线程的start()方法被调用后,JVM会自动调用Run()方法来执行任务;
      但是重载Run()方法,这是该方法则和普通成员方法一样,并不会因调用该线程的start()方法
      而被JVM自动运行。
   Example:
         public class ThreadTest extend Thread{

              //重写Run()方法,JVM会自动调用该方法
             public void run(){
               System.out.println("I`m Running!");
             }


              //重载Run()方法,则和普通的方法一样,并不会在该线程的Start()方法被调用后被                JVM自动运行
             public void run(int time){
               System.out.println("I`m OverRead! Running.");
             }
             
         }
   所以这里并不建议大家使用此方法来定义线程,因为在采用继承Thread的方式定义线程后,
   你不能再继承其他的类了,所以这也同时导致了程序的可扩展性大大降低了。

2.通过实现Java.lang.Runnable接口的方式来创建线程

  下面我们来举一个小例子:

      //通过实现Runnable接口来创建一个线程
      public class ThreadTest implments Runnable{
           public void run(){
             Sysotem.out.println("I`m running!");
           }
      }
关于线程的启动(Starting)
    首先我们要知道:任何一个线程的执行的前提都是必须有 Thread class的实例存在,
              并且通过调用run()方法启动线程。

1)如果线程是继承Thread类,则创建方式如下:
                                              1.ThreadTest1 tt = new ThreadTest1();  
                                              2.tt.start(); 
2)如果是实现Runnable接口,则创建方式如下:
                                               1.ThreadTest2 tt = new ThreadTest2();  
                                 2.Thread t = new Thread(tt);  
                                 3.t.start(); 

这里我们要注意到:在调用start()方法之前:线程处于新状态中,新状态指有一个Thread对象,但还没有一个真正的线程。

在调用start()方法之后:发生了一系列复杂的事情

启动新的执行线程(具有新的调用栈);

该线程从新状态转移到可运行状态;

当该线程获得机会执行时,其目标run()方法将运行。

 

注意:对Java来说,run()方法没有任何特别之处。像main()方法一样,它只是新线程知道调用的方法名称

因此,在Runnable上或者Thread上调用run方法是合法的。但并不启动新的线程。

案例:

实现Runnable接口的多线程

/** 
实现Runnable接口的类

* @author 
*/
 
publicclass DoSomethingimplements Runnable {
    
private String name;

    
public DoSomething(String name) {
        
this.name = name;
    } 

    
publicvoid run() {
        
for (int i = 0; i < 5; i++) {
            
for (long k = 0; k < 100000000; k++) ;
            System.out.println(name + 
": " + i);
        } 
    } 
}

 

/** 
测试Runnable类实现的多线程程序

* @author
*/
 
publicclass TestRunnable {
    
publicstaticvoid main(String[] args) {
        DoSomething ds1 = 
new DoSomething("宏伟");
        DoSomething ds2 = 
new DoSomething("乔四");

        Thread t1 = 
new Thread(ds1);
        Thread t2 = 
new Thread(ds2);

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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值