Java基础-多线程基本用法

多线程

1、什么是进程和线程

进程: 在操作系统上面运行的一个软件,一个exe程序(windows系统)
  • 进程是系统进行资源分配和调用的独立单元,每一个进程都有它的独立内存空间和系统资源
线程: cpu执行的最小单位;一个进程里面有多个线程;
  • 一个进程里面,有多个线程; 多线程;
  • 每个线程可以做不同的事情;也可以多个线程负责一件之情;
  • 多线程,并不能在cpu的层面,节省时间;
  • 线程的执行是抢占式的:当前运行的线程在任何时候都可能被挂起,以便另一个线程可以运行. 随机性
线程是进程的组成部分,一个进程可以有多个线程,但一个线程必须有一个父进程.线程可以拥有自己的栈,自己的程序计数器和自己的局部变量,但不拥有系统资源,它与父进程的其他线程共享该进程所拥有的全部资源.因为多个线程共享父进程的所有资源,因此编程比较方便,但必须更加小心,需要确保线程不会妨碍到同一进程里的其他线程.

线程是独立运行的,它并不知道进程中是否还有其他的线程存在.线程的执行是抢占式的:当前运行的线程在任何时候都可能被挂起,以便另一个线程可以运行. 随机性

一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行.

从逻辑角度来看,多线程存在于一个应用程序中,让一个应用程序可以有多个执行部分同时进行,但操作系统无须将多个线程看做多个独立的应用,对多线程实现调度和管理以及资源分配.线程的调度和管理由进程本身负责完成.

线程运行时间

并不是线程自己决定自己什么时候运行,连进程也不能决定; 由我们CPU(皇帝)来选择;

一定是由CPU来选择这个时间片交给哪个线程去运行; (线程,可以放弃),最后还是由CPU来选择;


2、 Java如何实现多线程

代码顺序分先后,线程的执行自己跑自己的;

​ 2.1 继承Thread

public class MyThread extends Thread{    
    public void run(){        
        //我们这个线程需要实现的功能;要完成任务        
    }
}
//1: 新建一个线程对象;
//2: 调用start方法;

package com.qianfeng.xqc.day0311;

/**
 * 可以创建多个线程
 * 线程之间是 并行
 * t1 线程 和 t2线程的执行顺序:随机,CPU皇帝(宠幸谁,谁就先运行)
 *
 */
public class TestThreadExtends {

	//运行的时候,main是一个线程(主线程)
	public static void main(String[] args) {

		System.out.println("start");
		
		//创建2个线程对象
		ThreadDemd t1 = new ThreadDemd("t1");
		ThreadDemd t2 = new ThreadDemd("t2");
		
		//通过线程对象启动线程
		t1.start();
		t2.start();
		
		System.out.println("end");
	}

}

/**
 * 线程的任务,都是写在run方法里面
 * 继承Thread
 *
 */
class ThreadDemd extends Thread{
	
	private String name;
		
	public ThreadDemd() {
	}

	public ThreadDemd(String name) {
		super();
		this.name = name;
	}

	@Override
	public void run() {
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		for(int i = 0;i < 10;i++) {
			System.out.println(name +":"+ i);
		}
	}
}


​ 2.2 实现Runnable

public class MyRunable implements Runnable{    
    public void run(){        
        //做我们要做的任务;        
    }    
}
//1:新建一个MyRunable对象;
//2:新建一个Thread对象(MyRunable);
//3:通过trhead对象来调用start方法;运行我们的线程;

package com.qianfeng.xqc.day0311;

public class TestThreadIterface {
	public static void main(String[] args) {		
		System.out.println("start");		
		//实例化一个线程任务类,通过Thread回调使用
		Thread t1 = new Thread(new ThreadRunnable("线程一"));
		Thread t2 = new Thread(new ThreadRunnable("线程二"));		
		//启动线程
		t1.start();
		t2.start();
		
		System.out.println("end");
	}	
}

/**
 * 实现Runnable,实现多线程
 */
class ThreadRunnable implements Runnable{
	private String name;	
	public ThreadRunnable() {}	
	public ThreadRunnable(String name) {
		super();
		this.name = name;	}
	public void run() {
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		for(int i = 0;i < 10;i++) {
			System.out.println(name +":"+ i);
		}
	}
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值