多线程

java中的多线程是一个同时执行多个线程的进程,线程是一个轻量级的子进程,是最小的处理单位。线程是进程的一条执行路径,

而进程是线程的集合。

1.优点:

         ① 他不会阻塞用户,因为线程是独立的,可以同时执行多个操作。

         ② 可以一起执行许多操作,因此可以节省时间。(提高程序效率)

         ③ 线程是独立的,因此如果单个线程中发生异常,他不会影响其他线程。

 

2.多任务处理

         多任务处理是同时执行多个任务的过程。使用多任务来利用CPU,多任务处理可以通过两种方式来实现:

         ① 基于进程的多任务处理(多进程)

              特点:每个进程在内存中都单独分配有一个内存区域,进程是重量级的。进程之间的通信成本很高。从

                        一个进程切换到另一个进程需要一些时间来保存和加载寄存器、内存映射、更新列表等。

         ② 基于线程的多任务处理 (多线程)

              特点:线程共享相同的地址空间;线程之间是轻量级的;线程之间的通信成本很低。

3.Thread类

   java提供了Thread类来实现线程编程。Thread类提供了在线程上创建和执行操作的构造函数和方法。Thread类

   扩展了object类并实现了runnable接口。

   创建线程的方式: MyThread myThread = new MyThread();

4.runnable接口

   创建线程有两种方式,一种是直接继承Thread类,另外一种是实现runnable接口。相比较Thread而言,通过实现

   runnable的方式可以更容易地实现资源共享,并且接口可以多实现且还能再继承其他类。

  总结:① 适合多个相同的程序代码的线程去处理同一个资源

             ② 可以java中单继承的限制

             ③ 增加程序的健壮性,代码可以被多个线程共享,代码和数据独立。

  创建线程的方式: MyThread myThread = new MyThread();     //只需要创建一个实例化对象然后被多个线程使用

                               Thread Thread1 = new Thread(myThread);  //线程1

                               Thread Thread2 = new Thread(myThread);  //线程2

 

  5.线程生命周期

            ① 新建状态:通过new创建一个线程,跟其他对象的创建时一样的。此时虚拟机会为其分配内存,并初始化

                                   其成员变量的值。

            ② 就绪状态:当线程对象调用了start方法之后,线程就进入了就绪状态。程序就会为其创建方法调用栈和程

                                   序计数器,处于这个状态中的线程并没有开始运行,只是表示该线程可以运行了,至于何时运

                                   行,取决于jvm中的线程调度器的调度。

            ③ 运行状态:当处于就绪状态的线程获得cpu,开始执行run()方法的线程执行体时,线程就进入了运行状态,

                                   线程调度的细节取决于底层平台采用的策略(抢占式调度策略和协作式调度策略)

            ④ 阻塞状态:运行状态的线程遇到以下情况就会进入阻塞状态:

                                  1.线程自己调用sleep方法主动放弃处理器资源;

                                  2.该线程调用了一个阻塞式IO方法,在该方法返回之前,该线程处于阻塞状态。

                                  3.该线程试图获得一个同步监视器,但该同步监视器正被其他线程持有。

                                  4.线程正在等待某个通知(notify)

                                  5.程序调用了线程的suspend方法,将线程挂起(容易导致死锁,避免使用)

           ⑤ 死亡状态:有三种情况会使线程进入死亡状态:

                                  1.run方法执行完成,线程正常结束。

                                  2.线程抛出未被捕获的exception或者error

                                  3.人为停止,比如调用stop方法(暴力停止,不建议使用),以及其他停止策略。

       

   6.线程中常用的方法

package com.multithreading.test;

//创建线程类,方法一
public class MyThread extends Thread {
	public MyThread() {
		
	}
	public MyThread(String threadName,ThreadGroup tg) {
		super(tg,threadName);
		start();
	}
	//线程功能函数
	public void run() {
		for(int i=1;i<=5;i++) {
			try {
				Thread.sleep(500);
			} catch (Exception e) {
				System.out.println(e.toString());
			}
				System.out.println(Thread.currentThread().getName()+":"+i);
			
		}
		
	}
	
	
    public static void main(String[] args) throws InterruptedException {
    	
    	//创建线程的方式1
    	MyThread myThread = new MyThread();
    	myThread.start();
    	myThread.interruptAndIsInterruptedA
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值