首页 > 编程 > Java > 正文

java学习[1]_多线程

2019-11-11 05:48:16
字体:
来源:转载
供稿:网友

多线程

简要介绍java中多线程相关知识

(一)多线程介绍: 随着CPU进入双核、多核时代,多线程的优势越来越明显。多线程是Java中的并发机制,表示能够在同一时间内同时执行多个操作。 这里举个多线程的例子,多线程实际开发例子:在很多网站中,当用户注册后,系统一方面会通知用户已经注册成功,一方面向用户在注册时填写的Email中发送邮件。

(二)如何定义线程: 定义线程有两种方法,一种是继承Thread类,一种是实现Runnable接口。 A、继承Thread类:定义一个线程可以通过继承Thread类来实现,这是一种相对简单的定义线程的方法。在Thread类中具有一个run方法,在定义的线程中需要重写这个方法。 B、实现Runnable接口:通过实现Runnable接口来实现。 在Runnable接口中具有一个抽象的run方法, 在实现Runnable接口时, 需要实现该run方法。 这两种方法中都需要定义一个run方法,不管该方法是通过重写父类方法,还是实现接口方法。 run方法是一个线程的入口,是线程必须具有的。使用通过实现Runnable接口定义的线程中,要想创建线程对象就不是很容易做到的。因为直接创建类对象,创建的并不是一个线程对象。要想创建线程对象,必须要借助Thread类: XianCheng x = new XianCheng(); Thread t = new Thread(x);

(三)线程是存在生命周期的: 线程的生命周期分为五种不同的状态:分别是新建状态、准备状态、运行状态、等待/阻塞状态和死亡状态。 1、新建:当一个线程对象被创建后; 2、准备:处于新建状态中的线程被调用start方法后; 3、运行:处于准备状态中的线程一旦被系统选中,使线程获取了CPU时间,就会进入运行状态; 4、等待/阻塞:许多线程调度的方法,包括睡眠、阻塞、挂起和等待,这些方法将在后面的调度章节中讲解。使用这些方法都会将处于运行状态的线程调度到等待/阻塞状态; 5、死亡:当线程中的run方法执行结束后,或者程序发生异常终止运行后,线程会进入死亡状态。

(五)常用函数: 1、sleep(long millis): 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行) 2、join():指等待t线程终止。使用方式。join是Thread类的一个方法,启动线程后直接调用,即join()的作用是:“等待该线程终止”,这里需要理解的就是该线程是指的主线程等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。 3、yield():暂停当前正在执行的线程对象,并执行其他线程。

代码1:继承Thread方法,使用了sleep函数:

package TestDuoxiancheng;//使用sleep(long millis): 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)public class TestThread1 extends Thread{ PRivate String name; private int count = 5; public TestThread1(String name){ this.name = name; } public void run() { for(int i=0;i<5;i++){ System.out.println(name + "线程在运行,此时的 count= " + count--); try { sleep((int) Math.random() * 5); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String[] args) { // TODO Auto-generated method stub TestThread1 T1 = new TestThread1("A"); TestThread1 T2 = new TestThread1("B"); System.out.println("实现Thread类的方法:"); T1.start(); T2.start(); }}

XiaoV_余

代码2:实现Runnable接口:

package TestDuoxiancheng;//使用sleep(long millis): 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)public class TestRunnable1 implements Runnable{ private int count=4; public void run(){ for(int i=0;i<5;i++){ System.out.println(Thread.currentThread().getName() + "线程在运行 count= " + count--); } } public static void main(String[] args) { // TODO Auto-generated method stub TestRunnable1 TR1 = new TestRunnable1(); Thread T1 = new Thread(TR1,"C"); Thread T2 = new Thread(TR1,"D"); System.out.println("继承Runnable的方法:"); T1.start(); T2.start(); }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表