Java基础知识:多线程

黑马程序员---------Java基础知识:多线程

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

                

一:线程的概念

进程是一个正在执行的程序。每一个进程都有一个执行顺序,该顺序叫一个执行路径,或者叫一个控制单元。而线程就是进程中一个独立的控制单元,也就是说线程在控制着进程的执行,一个进程当中起码有一个线程。换句话说一个程序当中起码有一个线程,在需要的时候可以启动多线程。而main函数中的线程称为主线程。

二:线程的创建

              创建线程有两种,一种是继承Thread,二是实现Runable接口。

1.             继承Thread,复写Thread类中的run方法。Run方法中的代码是让多线程执行的代码。启动线程时调用start方法。这个方法启动了线程,然后调用run方法方法。关闭线程则是stop方法。

例程显示的是第一种方法创建线程并启动线程。

public class Thread1Demo {

 

    public static void main(String[] args) {

       Test0  t1 =new Test0("01");//创建线程1

       Test0  t2 =new Test0("02");

       Test0  t3 =new Test0("03");

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

       t2.start();

       t3.start();

    }

 

}

class Test0 extends Thread

{

    private int num= 10;//多线程公有数据

    Test0(String name)

    {

        super(name);

    }

    public void run()//复写run方法

    {

        while(num>0)

        {

        num--;

        Stringstr =num+"";

        //Thread.currentThread() ;获取当前线程

        this.setName(str);//设置线程名字

        //this.getName();//获取当前线程名字

        System.out.println(this.getName()+"线程..."+num);

       

        }

   }

}

 

2.实现Runable接口,首先定义实现Runable接口,然后覆盖接口中run方法,同样的把需要运行的代码放入方法中。在主函数中通过Thread类创建线程对象,将Runable子类对象作为实际参数传给Thread的构造函数。启动线程时调用start方法。这个方法启动了线程,然后调用run方法方法。关闭线程则是stop方法。使用这种方法的好处在于这个方法可以多实现,避免了单继承是局限性。

例程演示第二种多线程的创建方式。

public class Thread1Demo {

 

    public static void main(String[] args) {

   

       Test00 t =new Test00();//创建Runable子类

//将Runable子类对象作为实际参数传给Thread的构造函数

       Thread t4 =new Thread(t);

       Thread t5 =new Thread(t);

       Thread t6 =new Thread(t);

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

       t5.start();

       t6.start();

    }

}

class Test00 implements Runnable

{

    private int num =10;

Objectobj =new Object();

public void run()

{

    while(true)//这个地方一定要用while,否则只会运行一次

    {

       synchronized(obj )//因为在多线程中共享数据会问题,所以要同步代码

      {//但是这样的用法还有个问题就是比较耗费资源。

       if(num>0)

       {

       //获取当前线程的名字,并打印出来                         System.out.println(Thread.currentThread().getName()+" ..."+num--);

       }

       else

       {

           return;//跳出,假如没有这句的话,程序没有自动停止

       }

    }

}

}

}

总结:多线程创建其实不难,在实际编程当中,使用比较多的是第二中方式,而在很多题目当中说到某些数据是共享的,多个线程都操作那个共享数据,这样的话,需要在RUN方法之前就定义好被共享的数据,假如在RUN之内定义则是没有线程都有这样一个数据,而不是共享的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
牙科就诊管理系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线查看数据。管理员管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等功能。牙科就诊管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 管理员在后台主要管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等。 牙医列表页面,此页面提供给管理员的功能有:查看牙医、新增牙医、修改牙医、删除牙医等。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。药品管理页面,此页面提供给管理员的功能有:新增药品,修改药品,删除药品。药品类型管理页面,此页面提供给管理员的功能有:新增药品类型,修改药品类型,删除药品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值