Java中的线程入门及多线程

一、什么是程序、进程(铺垫)

程序的定义:程序它以某些程序设计语言编写,运行于某种目标结构体系上。打个比方,程序就如同以英语(程序设计语言)写作的文章,要让一个懂得英语的人(编译器)同时也会阅读这篇文章的人(结构体系)来阅读、理解、标记这篇文章。(程序包括我们生活中QQ、微信、java实现的画图板、五子棋等)
程序储存地点:磁盘。
Java程序的内容:(算法、数据、代码、资源文件等组成的。)

  1. package语句,该部分至多只有一句,必须放在源程序的第一句。
  2. import语句,该部分可以有若干import语句或者没有,必须放在所有的类定义之前。
  3. public class (类名){},公共类定义部分,至多只有一个公共类的定义,Java语言规定该Java源程序的文件名必须与该公共类名完全一致。
  4. public static void main(String [] )args{} 主函数,在公共类中定义。

进程的定义:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命周期。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消。简单地说,将程序运行起来后,此时就会是一个进程。
因为硬件资源执行效率是有限的,在一个操作系统中能开启的进程数是有限的。
进程的储存地点:内存

二、什么是线程

线程的定义:可以理解为进程的多条执行线索,每条线索又对应着各自独立的生命周期。线程是进程中独立运行的单位。线程在执行时将线程运行时所需的数据储存在高速缓存中,在CPU中储存内存数据,这样的储存方式使线程执行速度更快。
通常我们说CPU是多少核多少线程的就是说在你的电脑上能同一时间执行多少个线程。超级计算机、云计算等从粗浅的方面理解就是线程数量足够多。另外,我们可以将线程形象的比喻为交通工具,而CPU就是马路。
线程的执行地点:CPU
线程的生命周期:创建、启动、执行、暂停、等待、休眠、停止。在这里插入图片描述

三、什么是多线程

在你的进程中同时有多个独立的运行单位,这进程就是一个多线程的进程(程序)。使用多线程就是最大限度的利用硬件资源来提升程序的执行效率。
像我们之前说的操作系统中开启的进程数是有限的,在一个进程中也不可以开启N个线程,硬件资源限制执行效率。

四、Java实现多线程的方法

1、Runnable接口

接口是不能直接定义对象的,所以我们需要创建一个类来实现Runnable接口,同时重写接口中的抽象方法。

public class run implements Runnable{
public int id=0;
public static void main(String [] args){
int id=0;
run a=new run();
Thread t=new Thread(a);
t.start(); }
@Override
public void run() {
id++;
System.out.println("id = "+id); }
}

run方法中是线程的运行方法(线程要执行的任务),当run结束后,线程也就结束了。

2、Thread类

Thread类是Runnable接口的子类,其中包括
start() 线程的启动方法,如果你想要JVM把你的这个类当做是一个线程,那你就必须要使用 start()方法来启动线程。
run() 线程的运行方法
sleep() 休眠方法。

public class THR extends Thread{
public int id=0;
public static void main(String [] args){
THR t=new THR();
t.start(); }
public void run(){
while(id<20){
id++;
System.out.println(Thread.currentThread()+" id = "+id);

//CPU速度很快,我们在这里设置休眠,以毫秒为单位,sleep()只能在启动之后进行,所以在这里要处理异常情况。
try {
sleep(1000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}

3、多线程实例

首先我们要明确,在每个Java程序中至少拥有一个线程,这个线程是JVM给你创建的,然后启动线程调用main函数,根据main函数中的代码,逐行调用。
另外,多个线程同时控制一个对象时会出现线程的互斥控制情况。
多个线程同时操作某一对象时,一个线程对该对象的操作可能会改变其状态,而该状态会影响
另一线程对该对象的真正结果.
这个例子我们在太多的文档中可以看到,就象两个操售票员同时售出同一张票一样.
而且一旦一个线程达到终止条件时,run方法便结束了,所以其他线程也同时结束。

public class main extends Thread{
public Tread_ demo;
//构造方法
public main(Tread_ demo){
this.demo=demo; }
public void run() {
while(demo.a<20){
demo.print();
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Tread_ demo=new Tread_(1);
for(int i=0;i<10;i++){
main m=new main(demo);
Thread t=new Thread(m);
t.start();
}
}
}

Tread_类:

public class Tread_ {
public int a=1;
public Tread_(int a){
this.a=a; }
public void print(){
a++;
System.out.println(Thread.currentThread() +"————————a="+a);
}

}

结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值