Java多线程原理及Thread类的使用
一、进程与线程的区别
1.进程是应用程序在内存总分配的空间。(正在运行中的程序)
2.线程是进程中负责程序执行的执行单元、执行路径。
3.一个进程中至少有一个线程在负责进程的运行。
4.一个进程中有多个线程在运行的程序,为多线程程序。
5.多线程技术是为了解决多部分代码同时执行。
6.多线程的优点是合理的使用资源。
二、jvm中的多线程
1.jvm中的多线程有很多,其中有负责定义代码运行的线程(这个从main方法开始执行的主线程),也有垃圾回收的线程(因为CPU的切换的不确定所以不定时执行。或者达到某个条件下执行)。
2.多线程的运行的根据CPU的切换完成的,也就是说怎么切换CPU说了算,所以多线程运行是随机的(CPU快速切换造成的)。
3.每次运行结果不一定相同,因为随机性造成的。
4.没一个线程都有运行的代码内容。这个称为线程的任务。创建一个线程就是为了去运行指定的任务代码。
三、创建多线程的方法
1.继承Thread类.
2.覆盖run( )方法。
3.创建子类对象、创建子类线程。
4.调用Thread类中的start( )方法,来执行线程。
start( )开启线程后,都会执行run方法。说明run( )方法中存储的是线程要运行的代码。所以自定义线程的任务代码都存储在run( )方法中。
四、Thread.currentThread().getName()可以查看当前正在运行线程的名称
五、调用start( )和调用run( )方法的区别
调用start会开启线程,让开启的线程去执行run( )方法中的线程任务。
直接调用run方法,线程并未开启,去执行run方法的只有主线程。
六、多线程代码(一)
//继承多线程方法Thread
class Demo extends Thread
{
private String name;
Demo(String name)
{
this.name = name;
}
//重写run( )方法
public void run()
{
show();
}
//需要执行的show( )方法
public void show()
{
for (int x=1;x<=10;x++)
{
System.out.println(name+"x ="+x);
}
}
} class ThreadDemo
{
public static void main(String[] args)
{
Demo d1 = new Demo("xianghong");
Demo d2 = new Demo("xiaoming");
//开启线程,调用run( )方法
d1.start();
d2.start();
//需要执行的主线程
for (int x=1; x<=10; x++)
{
System.out.println("main......"+x);
}
}
}
执行结果

七、多线程代码(二)
//继承多线程方法Thread
class Demo extends Thread
{
private String name;
Demo(String name)
{
this.name = name;
}
//重写run( )方法
public void run()
{
show();
}
//需要执行的show( )方法
public void show()
{
for (int x=1;x<=10;x++)
{
//getName()显示的是默认的名称
//System.out.println(getName()+"..."+name+"x ="+x);
//Thread.currentThread().getName()当前正在运行线程的名称
System.out.println(Thread.currentThread().getName()+"..."+name+"x ="+x);
}
}
} class ThreadDemo
{
public static void main(String[] args)
{
Demo d1 = new Demo("xianghong");
Demo d2 = new Demo("xiaoming");
//开启线程,调用run( )方法
d1.start();
d2.start();
//需要执行的主线程
for (int x=1; x<=10; x++)
{
System.out.println(Thread.currentThread().getName()+"......"+x);
}
}
}
执行结果

Java多线程原理及Thread类的使用的更多相关文章
- java 多线程3:Thread类中的静态方法
Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程 ...
- Java多线程系列二——Thread类的方法
Thread实现Runnable接口并实现了大量实用的方法 public static native void yield(); 此方法释放CPU,但并不释放已获得的锁,其它就绪的线程将可能得到执行机 ...
- “全栈2019”Java多线程第二章:创建多线程之继承Thread类
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- Java多线程专题3: Thread和ThreadLocal
合集目录 Java多线程专题3: Thread和ThreadLocal 进程, 线程, 协程的区别 进程 Process 进程提供了执行一个程序所需要的所有资源, 一个进程的资源包括虚拟的地址空间, ...
- Java并发编程:Thread类的使用
Java并发编程:Thread类的使用 在前面2篇文章分别讲到了线程和进程的由来.以及如何在Java中怎么创建线程和进程.今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知 ...
- Java多线程之线程其他类
Java多线程之线程其他类 实际编码中除了前面讲到的常用的类之外,还有几个其他类也有可能用得到,这里来统一整理一下: 1,Callable接口和Future接口 JDK1.5以后提供了上面这2个接口, ...
- Java多线程4:Thread中的静态方法
一.Thread类中的静态方法 Thread类中的静态方法是通过Thread.方法名来调用的,那么问题来了,这个Thread指的是哪个Thread,是所在位置对应的那个Thread嘛?通过下面的例子可 ...
- 【转】Java并发编程:Thread类的使用
一.线程的状态 在正式学习Thread类中的具体方法之前,我们先来了解一下线程有哪些状态,这个将会有助于对Thread类中的方法的理解. 线程从创建到最终的消亡,要经历若干个状态.一般来说,线程包括以 ...
- 3、Java并发编程:Thread类的使用
Java并发编程:Thread类的使用 在前面2篇文章分别讲到了线程和进程的由来.以及如何在Java中怎么创建线程和进程.今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知 ...
随机推荐
- java日期公共类
package com.mall.common; import java.text.ParseException; import java.text.SimpleDateFormat; import ...
- class.__subclasses__()
[class.__subclasses__()] Each class keeps a list of weak references to its immediate subclasses. Thi ...
- 64. Minimum Path Sum (Graph; DP)
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...
- 在Action中获取表单提交数据
-----------------siwuxie095 在 Action 中获取表单提交数据 1.之前的 Web 阶段是提交表单到 Servlet,在其中使用 Request 对象 的方法获取数据 2 ...
- 和大于S的最小子数组 · Minimum Size Subarray Sum
[抄题]: 给定一个由 n 个正整数组成的数组和一个正整数 s ,请找出该数组中满足其和 ≥ s 的最小长度子数组.如果无解,则返回 -1. 给定数组 [2,3,1,2,4,3] 和 s = 7, 子 ...
- js获得URL中的参数
js获得URL中的参数 function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + &quo ...
- JavaScript Math.floor() 方法
定义和用法: floor() 方法可对一个数进行下舍入. 语法: Math.floor(x); x:必须参数,可以是任意数值或表达式: 返回值: 小于等于 x,且与 x 最接近的整数. 说明: flo ...
- jvm编译环境搭建 Debina篇
这里参考了 <Java虚拟机精讲> <深入理解Java虚拟机 JVM高级特性与最佳实践> http://www.cnblogs.com/zxfdream/p/5411511.h ...
- velocity在html中换行符转换
<td colspan="3" class="tdContent2">$!obj.getDealInfo().replaceAll("\r ...
- Android 上传文件到XP
Android部分: AsyncHttpClient client = new AsyncHttpClient(); RequestParams requestParams = new Request ...