关于java多线程

来源:互联网 发布:bet可以测什么数据 编辑:程序博客网 时间:2024/06/11 18:12

进程(process)  概念就不说了......系统可以为一个程序同时创建多个进程。例如,同时打开两个记事本文件。每一   

                         个进程都有自己独立的一块内存空间和一组系统资源,即使同类进程之间也不会共享系统资源。

线程(thread)  就是比进程更小的运行单位。一个进程中可以包含多个线程。与进程不同的是,同类的多线程是共享

                       一块内存空间和一组系统资源的。每一个程序至少拥有一个线程,成为主线程。当程序加载到内存时

                       ,启动主线程。要加载其它程序,程序就要使用Runnable接口和Thread类。

Runnable接口  Runnable接口只声明了一个run方法。run是线程执行的起点,即在创建并启动一个线程后,系统

                           自动调用run方法。一个线程对象必须实现run的方法完成线程的所有活动。

Thread类  Thread类将Runnable接口中的run方法实现为空方法,它的声明格式是:

                    public class Thread extends Object implements Runnable

                 (1)构造方法

                      public Thread()

                      public Thread(String name)

                      public Thread(Runnable target)

                      public Thread(Runnable target,String name)

                      public Thread(ThreadGroup group,Runnable target)

                      public Thread(ThreadGroup group,String name)

                      public Thread(ThreadGroup group , Runnable target,String name)

                 (2)Thread类的静态方法:

                      public static Thread currentThread() //返回当前执行线程的引用对象

                      public static int activeCount()            //返回当前线程组中活动线程个数

                      public static enumerate(Thread[] tarray) //将当前线程总的活动线程拷贝到tarray数组中,包括

                                                                                        子线程

                 (3)Thread类的实例方法

                      public final String getName()           //返回线程名

                      public final void setName(String name) //设置线程的名字为那么

                      public void start() //启动已创建的线程对象

                      public final boolean isAlive() //返回线程是否启动的状态

                      public final ThreadGroup getThreadGroup() //返回当前线程所属的线程组名

                      public String toString()  //返回线程的字符串信息,包括名字,优先级和线程组

 创建线程的两种方法 

       (1)继承Thread类

                       由于Thread类的run()方法只是空方法,Thread1类必须覆盖run()方法。

                       在程序中,线程语句的顺序只决定了线程语句产生的顺序,线程产生后并不立即运行,而是和系统中

               的所有其它线程一起等待系统来执行它,这时所有线程执行的机会的均等的,所以这些线程的这些顺序由

               系统调度和控制,不由程序决定。

                 public class Thread1 extends Thread{
                     private int k=0;
                     public Thread1(String name,int k){
                         super(name);
                         this.k = k;
                     }
                    public void run(){
                        int i = k;
                        System.out.println();
                        System.out.println(getName()+": ");
                        while(i<50){
                           System.out.println(i+" ");
                           i+= 2;
                        }
                       System.out.println(getName()+" end!");
                   }
                   public static void main(String[] args) {
                       Thread1 t1 = new Thread1("Thread1",1);
                       Thread1 t2 = new Thread1("Thread2",2);
                       t1.start();
                       t2.start();
                       System.out.println("activeCount="+Thread.activeCount());
                   }

         (2)实现Runnable接口

                         Rubbable1类只是实现Runnable的接口的一个类,它并不是Thread的子类。Runnable1类的对象

                  r1虽然带有run()方法的线程体,但其中没有start()方法,所以r1不是以线程对象。

                         由于Thread类的run()方法是空方法,所以买main()方法中,必须已Runnable1类的对象r1和r2作为

                 目标对象,构造Thread类的线程t1、t2,之后通过t1.start()启动线程。

                  public class Runnable1 implements Runnable{
                      int k=0;
                      public Runnable1(int k){
                          this.k = k;
                      }
                      public void run(){
                          int i = k;
                          System.out.println("");
                          while(i<500){
                              System.out.println(i+" ");
                               i += 2;
                          }
                      }
                      public static void main(String[] args) {
                          Runnable1 r1 = new Runnable1(1);
                          Runnable1 r2 = new Runnable1(2);
                         Thread t1 = new Thread(r1);
                         Thread t2 = new Thread(r2);
                         t2.start();
                         t1.start();
                     }
                }

  两种创建线程方法的比较

         (1)直接继承线程Thread类

                          该方法编写简单,可以直接操作线程,适用于单重继承情况,因而不能再继承其他类。

         (2)实现Runnable接口。

                         当一个线程已继承了另一个类时,就只能用实现Runnable接口的方法来创建线程,且便于保持程序

                  风格的一致性。

 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 儿童上课小动作多怎么办 小孩锁骨骨裂怎么办 小孩子不爱写作业怎么办 小孩不交作业怎么办 小孩子不喜欢写作业怎么办 实行两票制 一品红会怎么办 跳舞之后浑身疼怎么办 事业编体检怀孕怎么办 辞职后报到证怎么办 学生早上起床困怎么办 延期毕业报到证怎么办 学校报到证丢失怎么办 生育险不满一年怎么办 产假结束上班宝宝怎么办 辞职后生育津贴怎么办 员工要不到工资怎么办 试用期不发工资怎么办 单位不给探亲假怎么办 工作5.5天周六怎么办 不爱运动的幼儿怎么办 总跟孩子生气怎么办 小孩经常感冒发烧怎么办 家里出现皮球虫怎么办 第一天教幼儿园怎么办 幼师遇到家长投诉怎么办 小孩喜欢玩手机怎么办 幼师掐孩子胳膊怎么办 孩子喜欢抓人怎么办 小孩顽皮不听教怎么办 出现了心理异常怎么办 想问下心理出问题该怎么办 大班幼儿爱说话怎么办 孩子不喜欢去幼儿园怎么办 别人抢宝宝玩具怎么办 新生儿抱淘气了怎么办 野兔子吃葵花怎么办 烫伤了怎么办安全反思 安全教案触电了怎么办 烫伤了怎么办儿歌导入 生病了怎么办教学反思 大班安全《烫伤了怎么办》