1.java多线程基本知识

1.1.进程介绍

  不管是我们开发的应用程序,还是我们运行的其他的应用程序,都需要先把程序安装在本地的硬盘上。然后找到这个程序的启动文件,

启动程序的时候,其实是电脑把当前的这个程序加载到内存中,在内存中需要给当前的程序分配一段独立的运行空间。这片空间就专门负

责当前这个程序的运行。

  不同的应用程序运行的过程中都需要在内存中分配自己独立的运行空间,彼此之间不会相互的影响。我们把每个独立应用程序在内存

的独立空间称为当前应用程序运行的一个进程。

  进程:它是内存中的一段独立的空间,可以负责当前应用程序的运行。当前这个进程负责调度当前程序中的所有运行细节

1.2.线程介绍

  启动的QQ聊天软件,需要和多个人进行聊天。这时多个人之间是不能相互影响,但是它们都位于当前QQ这个软件运行时所分配的内

存的独立空间中。

  在一个进程中,每个独立的功能都需要独立的去运行,这时又需要把当前这个进程划分成多个运行区域,每个独立的小区域(小单元)

称为一个线程。线程:它是位于进程中,负责当前进程中的某个具备独立运行资格的空间。进程是负责整个程序的运行,而线程是程序中具

体的某个独立功能的运行。一个进程中至少应该有一个线程

1.3.多线程介绍 

  现在的操作系统基本都是多用户,多任务的操作系统。每个任务就是一个进程。而在这个进程中就会有线程。

  真正可以完成程序运行和功能的实现靠的是进程中的线程。多线程:在一个进程中,我们同时开启多个线程,让多个线程同时去完成某

些任务(功能)。(比如后台服务系统,就可以用多个线程同时响应多个客户的请求)

  多线程的目的:提高程序的运行效率。

1.4.多线程运行的原理:CPU在线程中做时间片的切换

  其实真正电脑中的程序的运行不是同时在运行的。CPU负责程序的运行,而CPU在运行程序的过程中某个时刻点上,它其实只能运行一

个程序。而不是多个程序。而CPU它可以在多个程序之间进行高速的切换。而切换频率和速度太快,导致人的肉眼看不到。每个程序就是进程,

而每个进程中会有多个线程,而CPU是在这些线程之间进行切换。了解了CPU对一个任务的执行过程,我们就必须知道,多线程可以提高程序

的运行效率,但不能无限制的开线程。

1.5.实现线程的两种方式:继承Thread类和实现Runnable接口

1.5.1.继承Thread类  

package cn.thread;
import java.util.Random;
/**
* Created by Administrator on 2018/6/7.
* 线程实现方式1:继承Thread的方式
* 继承类必须重写 run() 方法,该方法是新线程的入口点。它也必须调用 start() 方法才能执行。
*/
public class MyThreadWithExtends extends Thread {
String flag;
public MyThreadWithExtends(String flag){
this.flag = flag;
}
@Override
public void run() {
String tname = Thread.currentThread().getName();
System.out.println(tname+"线程的run方法被调用……");
Random random = new Random();
for(int i=0;i<20;i++){
try {
Thread.sleep(random.nextInt(10)*100);
System.out.println(tname+ "...."+ flag);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Thread thread1 = new MyThreadWithExtends("a");
Thread thread2 = new MyThreadWithExtends("b");
thread1.start();
thread2.start();
//如果是调用thread的run方法,则只是一个普通的方法调用,不会开启新的线程
// thread1.run();
// thread2.run();
}
}

1.5.2.实现Runnable接口

package cn.thread;

/**
* Created by Administrator on 2018/6/7.
* 线程实现方式2:继承Thread的方式
*/
public class MyThreadWithImpliment implements Runnable{
int x;
public MyThreadWithImpliment(int x) {
this.x = x;
} public void run() {
String name = Thread.currentThread().getName();
System.out.println("线程" + name + "的run方法被调用……");
for (int i = 0; i < 10; i++) {
System.out.println(x);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} public static void main(String[] args) {
Thread thread1 = new Thread(new MyThreadWithImpliment(1), "thread-1");
Thread thread2 = new Thread(new MyThreadWithImpliment(2), "thread-2");
thread1.start();
thread2.start();
// 注意调用run和调用start的区别,直接调用run,则都运行在main线程中
// thread1.run();
// thread2.run();
}
}

  

1.java多线程_实现线程的两种方式的更多相关文章

  1. JAVA·多线程:创建线程的两种方式

    1.–扩展java.lang.Thread类 package multiThread; public class Thread02extThread { public static void main ...

  2. java多线程总结:线程的两种创建方式及优劣比较

    1.通过实现Runnable接口线程创建 (1).定义一个类实现Runnable接口,重写接口中的run()方法.在run()方法中加入具体的任务代码或处理逻辑. (2).创建Runnable接口实现 ...

  3. java多线程之创建线程的4种方式及Future

    Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.Java可以用四种方式来创建线程: 继承Thread创建线程 实现Runnable接口创建线程 实现callab ...

  4. Java多线程之创建线程的三种方式比较

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6560057.html  一:继承Thread类创建线程 1:继承Thread类定义线程子类: 2:重写run( ...

  5. 【java并发】传统线程技术中创建线程的两种方式

    传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...

  6. Java新建线程的两种方式

    Java新建线程有两种方式,一种是通过继承Thread类,一种是实现Runnable接口,下面是新建线程的两种方式. 我们假设有个竞赛,有一个选手A做俯卧撑,一个选手B做仰卧起坐.分别为两个线程: p ...

  7. Java并发基础01. 传统线程技术中创建线程的两种方式

    传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...

  8. python 并发编程 多线程 开启线程的两种方式

    一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 二 开启线程的两种方式 第一种 每造一个进程,默认有一个线程,就是 ...

  9. 创建线程的两种方式比较Thread VS Runnable

    1.首先来说说创建线程的两种方式 一种方式是继承Thread类,并重写run()方法 public class MyThread extends Thread{ @Override public vo ...

随机推荐

  1. 8. find

    find使用 find命令的主要作用是对树形目录层次结构进行彻底检查. find命令的一般格式: find pathname -expressions     find常用表达式 在当前文件夹中找出名 ...

  2. 从Myeclipse到IntelliJ IDEA-——让你摆脱鼠标,全键盘操作

    注:本文是对原文章(https://blog.csdn.net/luoweifu/article/details/13985835)做的补充 快捷键对比 Myeclipse IDEA 说明 Ctrl+ ...

  3. freeRTOS学习一

    freeRTOS中的链表结构: /* * Definition of the only type of object that a list can contain. 链表中的节点 */ struct ...

  4. Windows 下部署 hadoop spark环境

    一.先在本地安装jdk 我这里安装的jdk1.8,具体的安装过程这里不作赘述 二.部署安装maven 下载maven安装包,并解压 设置环境变量,MAVEN_HOME=D:\SoftWare\Mave ...

  5. stalstack

    Saltstack 是干什么的 saltstack 是一个开源异构平台基础设置管理工具 Saltstack 能干什么 如果是一个管理成千上百服务器的管理员,你会遇到场景 需要在每台服务器上面部署age ...

  6. 【Life】 今天的思考

    今天一个实习生来问我问题,他要用python操作outlook发送邮件,代码是从网上找的. 在其他人的电脑上可以成功运行,但在他的电脑上就失败. 处理过程 (1)我查看了他method里的代码, 发现 ...

  7. WEB小计

     使用vue的事件绑定时,应当使用.stop来阻止事件的传播   html 有捕获和冒泡两种事件机制

  8. Django模板(Template)系统

    Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} 变量名由字母数字和下划线组成. 点 ...

  9. SQL注入之DVWA平台测试mysql注入

    今天主要针对mysql常用注入语句进行测试. 测试环境与工具: 测试平台:DVWA,下载地址:http://down.51cto.com/data/875088,也可下载metaspolit-tabl ...

  10. 怎样重置MySQL密码?

    systemctl stop mysqld systemctl set-environment MYSQLD_OPTS="--skip-grant-tables" systemct ...