您的位置:首页 > 编程语言 > Java开发

Java基础-多线程基本用法

2020-03-29 19:10 260 查看

多线程

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);
}
}

}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
xqc0710 发布了19 篇原创文章 · 获赞 1 · 访问量 339 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: