Java--多线程(一)


多线程:
进程:正在进行中的程序(直译);
对应的是一个程序在内存中开辟的空间。
线程:就是进程中的一个负责程序执行的控制单元,(执行路径)
        一个进程中可以有多条执行路径,称之为多线程。
       一个进程当中,至少要有一个线程。线程的出现,负责程序的执行。
多线程的目的:
开启多个线程是为了同时运行多部分代码


多线程的任务:
每一个线程都有自己运行的内容。这个内容可以称为线程要执行的任务。
    我们都要知道,控制程序运行的控制器为cpu ,所以在某一个时刻,只有一个程序来执行。只不过控制路径切换的频率很快,在表面上看好像是同时进行的。其实只是CPU切换的速率特别快。而当开启的程序过多时,处理器处理每一个程序的频率降低,从而导致效率降低。

多线程的优缺点:
好处:解决了多个程序同时运行的问题。
弊端:线程太多会导致效率的降低。


在Java中,对线程的认识:
vm启动时就启动了多个线程,至少有两个线程可以分析的出来。
1.执行main函数的线程
    该线程的任务代码都定义在main函数中
2.负责垃圾回收的线程。
创建线程的方法:
第一种:继承Thread类。
java.lang.Thread 类: 线程,Java虚拟机允许应用程序并发的运行多个执行线程。
将类声明为Thread的子类,该子类应该重写Thread类的run方法。

步骤:
  1、定义一个类继承Thread类。
  2、覆盖Thread类中的run方法。
  3、创建线程对象(直接创建Thread类的子类对象);
  4、调用start方法,开启线程,并调用线程的任务:run方法。
  可以通过Thread类的getName()方法获取线程的名称名称形式为:Thread——数字;
  currentThread()方法:返回当前执行线程的对象;
  主线程的名字就是:main;

package ThreadDemo;
public class ThreadDemo1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
        /*
         * 为什么要继承Thread并复写run方法的原因:
         	创建线程的目的是为了开启一条执行路径,去运行指定的代码和其他代码实现同时运行。
         	而运行的指定代码就是这个执行路径的任务。
         
         	JVM创建的主线程的任务都定义在了主函数中。
         	而自定义的线程它的任务在哪里?
         	Thread类用于描述线程,线程是需要任务的。所以Thread类也对任务进行描述。
         	这个任务就通过Thread类中的run方法来体系那。也就是说,run方法就是封装自定义线程运行任务的函数。
         
         	run方法中定义就是线程要运行的任务代码。
         	
         	开启线程是为了运行指定代码。所以只有继承Thread类,并复写run方法。
         	将运行的代码定义在run方法中即可。
         */
		
		Demo1 d1 = new Demo1("wangci");
		Demo1 d2 = new Demo1("xiaoqiang");
		//d1.run();//调用run方法。就会是一个标准的顺序执行方式;应该使用start方法来启动线程。
		//d2.run();
		d1.start();//开启线程,调用run方法;
		d2.start();
		System.out.println("main...."+Thread.currentThread().getName());
		
	}

}
class Demo1 extends Thread{
	private String name;
	Demo1(String name){
		this.name = name;
		//super(name);
	}
	public void run(){
		show();
	}
	public void show(){
		for(int x=0;x<20;x++){
			System.out.println(name+"......"+getName());
		}
	}
}

创建线程的第二种方式:
  第一种方式中的弊端:
             当一个类有父类的时候,就不能再继承Thread类,从而不能实现线程。这时,可以实现Runable接口的方式来实现多线程。
 引出第二种实现多线程的方法:实现Runnable接口实现多线程。

步骤:
     1、定义类实现Runnable接口。
     2、覆盖接口中的run方法,将线程的任务代码封装到run方法中。
     3、通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造函数的参数进行传递。
                            原因:因为线程的任务都封装在Runnable接口子类对象的run方法中。所以要在线程对象创建时就必须明确要运行的任务。
     4、调用线程对象的start方法开启线程。     
    
   Runable接口应该由哪些打算通过某一线程执行其实例的类来实现,类必须定义一个 称为run的无参数方法。

package ThreadDemo;
public class ThreadRunnableDemo1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		Demo2 d1 = new Demo2();
		Demo2 d2 = new Demo2();
		
		Thread t1 = new Thread(d1);//使用Thread类的构造函数:Public Thread(Runnable target);引入线程执行对象。
		Thread t2 = new Thread(d2);
		t1.start();
		t2.start();
		
	}

}
class Demo2 implements Runnable// extends Fu//由于Java不支持多继承。这时使用继承Thread类的方法实现多线程,就不易实现。
                      //通过接口的形式扩展Demo类的功能,让其中的内容可以作为线程的任务运行。
{
	public void run()
	{
		show();
	}
   public void show()
   {
	   for(int x = 0;x<20;x++)
	   {
		   System.out.println(Thread.currentThread().getName()+"......"+x);
	   }
   }
}
/*class Fu
{
	}*/

第二种方法的好处:
  1、如果继承了Thread类,就称为了Thread类对象中的一员,并拥有了Thread对象中的所有方法。而实现了Runnable接口,它仅仅是将线程的任      务进行了对象的封装。这是,仅仅是将要进行多线程的任务封装。实现多线程,只需要创建Thread类对象,并引入线程任务引入即可。
 
 实现Runnable和继承Thread类的区别(实现Runnable接口的好处):
 1、将线程的任务从线程的子类中分离出来,进行了单独的封装。
             按照面向对象的思想将任务封装成了对象。
  2、避免了Java单继承的局限性。

对比两种方式,我们可以得出 创建线程的第二种方式较为常用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本系统的研发具有重大的意义,在安全性方面,用户使用浏览器访问网站时,采用注册和密码等相关的保护措施,提高系统的可靠性,维护用户的个人信息和财产的安全。在方便性方面,促进了校园失物招领网站的信息化建设,极大的方便了相关的工作人员对校园失物招领网站信息进行管理。 本系统主要通过使用Java语言编码设计系统功能,MySQL数据库管理数据,AJAX技术设计简洁的、友好的网址页面,然后在IDEA开发平台中,编写相关的Java代码文件,接着通过连接语言完成与数据库的搭建工作,再通过平台提供的Tomcat插件完成信息的交互,最后在浏览器中打开系统网址便可使用本系统。本系统的使用角色可以被分为用户和管理员,用户具有注册、查看信息、留言信息等功能,管理员具有修改用户信息,发布寻物启事等功能。 管理员可以选择任一浏览器打开网址,输入信息无误后,以管理员的身份行使相关的管理权限。管理员可以通过选择失物招领管理,管理相关的失物招领信息记录,比如进行查看失物招领信息标题,修改失物招领信息来源等操作。管理员可以通过选择公告管理,管理相关的公告信息记录,比如进行查看公告详情,删除错误的公告信息,发布公告等操作。管理员可以通过选择公告类型管理,管理相关的公告类型信息,比如查看所有公告类型,删除无用公告类型,修改公告类型,添加公告类型等操作。寻物启事管理页面,此页面提供给管理员的功能有:新增寻物启事,修改寻物启事,删除寻物启事。物品类型管理页面,此页面提供给管理员的功能有:新增物品类型,修改物品类型,删除物品类型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值