Java多线程总结

进程和线程的区别

进程:系统做一件事运行一个任务,所运行的任务通常是 程序,每个 运行中的程序就是一个进程
        特征:独立性:进程是系统中独立的实体,拥有自己独立的资源,每个进程都有自己私有的地址空间
                    动态性:程序是静态的(静态的指令集合)进程是动态的(系统中运行的指令集合,有了生命周期)
                    并发性:进程之间,交替的执行
线程:当一个程序运行时,内部可能有多个顺序执行流,每个顺序执行流就是一个线程
        特征:一个顺序执行流,他是进程的组成部分,一个进程有多个线程
        优势:进程之间不能共享内存,系统创建进程要为进程重新分配资源
                    单线程之间共享内存简单,创建线程的代价小,所以多线程的实现多任务并发比多进程实现并发的效率高
总结:一个程序运行至少一个进程,一个进程里面至少包含一个线程,线程是进程的组成成分

Java定制线程类的两种方法

(1)、继承Thread
public class MyThread{

	public static void main(String[] args) {
		
	new MyThread("A").start();
	new MyThread("B").start();
	}
}

class MyThread extends Thread{
	String name = null;
	public MyThread(String name){
		this.name = name;
	}
	public void run(){
		for(int i = 0;i<5;i++){
			try {
				Thread.sleep((long)Math.random()*1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.print(name);
		}
		
	}
	
}




(2)、实现Runnable接口
public class MyTread{

	public static void main(String[] args) {
		
		new Thread(new MyThread("A")).start();
		new Thread(new MyThread("B")).start();
	}
}

class MyThread implements Runnable{
	String name = null;
	public MyThread(String name){
		this.name = name;
	}
	public void run(){
		Thread current = Thread.currentThread();
		for(int i = 0;i<5;i++){
			try {
				current.sleep((long)Math.random()*1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.print(name);
		}
		
	}
	
}


注意:线程一旦进入休眠,run方法将中断,当前线程进入阻塞状态,从而给其他线程执行的机会,进程休眠结束后,不一定立刻被执行,只有被再次调用才会执行

区别:线程的并发:计算机只有一个CPU,某一个具体时刻只能执行一个线程,但是在一段时间内,多个线程可以得到执行
            线程的并行:计算机有多个CPU,某一时刻,可以同时执行多个线程

线程的生命周期


注意:创建线程后我们只有通过start()方法才能启动线程
            线程启动后进入可运行状态,但是不一定能运行,只有被调度才真正出于运行状态
           出于运行状态的线程也可能被调度出于可运行状态

线程中断

原理:当调用一个线程的interrupted方法时,即向该线程发送一个中断请求,并将该线程的interrupted状态值置为true
            但是该线程由于调用sleep或wait出于阻塞状态那么会抛出一个InterruptedException异常

线程的优先级

通过setPriority()方法来设置优先级
在任意时刻,当有多个线程处于可运行状态,运行系统会挑一个优先级高的线程执行,只有当线程停止或者退出或由于某种原因不执行的时候,低优先级的线程才可以被执行
如果优先级一样,会以round-robin的方式选择一个执行

被选中的线程可能由于下面几个原因退出,从而给其他线程以执行的机会
1.一个更高优先级的线程处于可运行状态
2.线程主动退出(调用yield方法),或者他的run结束
3.在支持分时方式的系统上,分配给该线程的时间片结束(Java本身并不实现分时,分时是和平台相关的)
-------------------------------------------------------------------------------------------------------------------------------------------------------------
以上都是线程异步的,接下来的一篇通过生产者消费者总结线程同步问题


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值