Java thread(1)
这一部分主要讨论 java多线程的基本相关概念以及两种java线程的实现方式:
线程与进程:
这个操作系统书上介绍得很详细,这里就列出一些比较主要的:
线程: 线程本身有很少的资源,因为所拥有的资源较少,所以线程切换所花费在上下文切换的时候的开销也较少。线程是能够独立运行的最小的单位。多个线程之间共享进程所拥有的基本资源,线程之间对于某些数据的操纵可能会相互影响。
进程: 运行当中的程序,多个进程之间,每个进程的内部数据对于其他进程而言是不可见的。
采用多线程的目的:
采用多线程的目的就是为了最大限度地利用cpu的资源,从进程的层次而言,操作系统会有自己的一套进程调度的机制,让进程尽量充分地使用cpu,从更小的粒度来划分,在一个进程运行的过程中也不可能完全占用着cpu,这样要想让cpu更充分地被使用,就将一个进程的执行划分为几个线程的执行,当某一线程的处理不需要占用CPU而只和I/O等资源打交道,让需要占用cpu的其他线程有机会获得cpu资源,线程之间可以进行灵活地切换,这样能让cpu被利用的更充分。
当程序启动的时候会自动创建一个主线程,主方法main就是在主线程上运行,程序全由线程来执行。Java中内置了对于多线程编程的支持,多线程含两个或者两个以上并发运行的部分,利用多线程可以编写出cpu利用率最大的高校程序,使得cpu的空闲时间最多。
Java中实现线程的两个基本方法:
1继承Thread类 并且重写其中的run方法
2继承Runnable接口 实现其中的run方法
详细说明:
1 采用继承Thread类的方式来实现多线程直接采用没有形参的构造方法生成新的Thread类。其中的run方法中的内容就是这个线程所需要完成的事情,线程的启动只能通过Thread类的start()方法来进行,只有这样程序才能和操作系统进行交互,按照线程的方式进行启动,直接调用run()方法实际上还是单线程的方式。start方法是不可以被重写的,否则线程就没法正常启动了。
2 采用实现Runnuble接口的方式实现多线程机制的时候,生成新的线程类的时候要将这个Runnable接口传入,采用以下的构造方法:Thread(Runnable target) 注意,不管使用哪种方式实现一个线程,最终启动的时候还是要通过Thread类的start方法,只不过一个是继承Thread类之后,调用start启动,一个是构建新的Thread类的时候把已经实现了Runnable接口的类作为参数传递进来,最后再调用start方法。
具体的例子:
package com.javase.thread; public class threadTest {
public static void main(String[]args){
//第一种方式实现
Thread t11=new Thread1("mythread");
//第二种方式实现 传入一个runnable参数
Runnable r=new Thread2();
Thread t2=new Thread(r);
//启动线程
t11.start();
t2.start();
} }
//注意这里要是重写构造方法的话 就要调用之前的 父类的构造方法
class Thread1 extends Thread{
int i;
public Thread1(){
super();
}
public Thread1(String string) {
super(string);
}
//重写run方法
public void run()
{
for(i=0;i<5;i++)
{System.out.println("the number for " + this.getName()+" is "+i);}
}
} class Thread2 implements Runnable{ @Override
public void run() {
int i;
for(i=0;i<5;i++)
{System.out.println("the number for is"+i);} } }
//运行结果
/*
the number for mythread is 0
the number for is0
the number for mythread is 1
the number for is1
the number for mythread is 2
the number for is2
the number for mythread is 3
the number for is3
the number for mythread is 4
the number for is4
*/
上面的代码中用最基本的两个方法实现了两个线程,可以看到在Thread1中,为了给线程进行重命名,重写了构造方法,在其中调用了super(String),这个比较关键,这里实际上是调用了Thread类的Thread(String)的构造方法。在main函数中,通过将引用传入Thread类来生成一个新的线程,线程的名称采用默认的形式,之后我们会从具体代码的角度来分析两种线程实现机制的区别。
Java thread(1)的更多相关文章
- Java Thread 的 sleep() 和 wait() 的区别
Java Thread 的使用 Java Thread 的 run() 与 start() 的区别 Java Thread 的 sleep() 和 wait() 的区别 1. sleep ...
- Java Thread 的 run() 与 start() 的区别
Java Thread 的使用 Java Thread 的 run() 与 start() 的区别 Java Thread 的 sleep() 和 wait() 的区别 1. ...
- Java Thread wait, notify and notifyAll Example
Java Thread wait, notify and notifyAll Example Java线程中的使用的wait,notify和nitifyAll方法示例. The Object clas ...
- java: Thread 和 runnable线程类
java: Thread 和 runnable线程类 Java有2种实现线程的方法:Thread类,Runnable接口.(其实Thread本身就是Runnable的子类) Thread类,默认有ru ...
- Java Thread join() 的用法
Java Thread中, join() 方法主要是让调用改方法的thread完成run方法里面的东西后, 在执行join()方法后面的代码.示例: class ThreadTesterA imple ...
- Java thread jargon
In Java thread topic, the task to be executed and the thread to drive the task are two concepts shou ...
- 性能分析之-- JAVA Thread Dump 分析综述
性能分析之-- JAVA Thread Dump 分析综述 一.Thread Dump介绍 1.1什么是Thread Dump? Thread Dump是非常有用的诊断Java应用问题的工 ...
- Java Thread线程控制
一.线程和进程 进程是处于运行中的程序,具有一定的独立能力,进程是系统进行资源分配和调度的一个独立单位. 进程特征: A.独立性:进程是系统中独立存在的实体,可以拥有自己独立的资源,每个进程都拥有自己 ...
- [译]Java Thread wait, notify和notifyAll示例
Java Thread wait, notify和notifyAll示例 Java上的Object类定义了三个final方法用于不同线程间关于某资源上的锁状态交互,这三个方法是:wait(), not ...
- [译]Java Thread Sleep示例
Java Thread Sleep示例 java.lang.Thread sleep(long millis)方法被用来暂停当前线程的执行,暂停时间由方法参数指定,单位为毫秒.注意参数不能为负数,否则 ...
随机推荐
- HDU-1269 迷宫城堡(连通分量)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 51nod - 1586 - 约数和 - 打表 - 思维
https://www.51nod.com/Challenge/Problem.html#problemId=1586 一眼看过去居然一点思路都没有的,一言不合就打表,打贡献表. #include & ...
- H5白屏问题
前言 前阵子弄了灰度环境,H5这边需要给灰度环境的接口加上Cookie,配置的期间遇到一些Cookie问题以及白屏在此记录下 1.H5请求接口带不上Cookie 解决方法:前端使用了 webpack ...
- PowerDesigner 使用说明
1. 附加:工具栏不见了 调色板(Palette)快捷工具栏不见了PowerDesigner 快捷工具栏 palette 不见了,怎么重新打开,找回来呢 上网搜索了一下"powerdesig ...
- JVM 垃圾回收(GC)机制
目录 一.背景 二. 哪些内存需要回收? 1.引用计数算法 2 .可达性分析算法 三. 四种引用状态 1.强引用 2.软引用 3.弱引用 4.虚引用 对象死亡(被回收)前的最后一次挣扎 方法区如何判断 ...
- nodejs http服务器简单搭建
var http = require('http') // 1. 创建 Server var server = http.createServer() // 2. 监听 request 请求事件,设置 ...
- vue 组件间传值方式
/* 父组件给子组件传值 1.父组件调用子组件的时候 绑定动态属性 <v-header :title="title"></v-header> 2.在子组件里 ...
- xml转dict
xml转dict 最开始的时候一直是按格式比较严谨的XML格式进行的转换,所以一般只需要考虑两种情况就可以了,即各个节点或者子节点全相同或者全不同,全相同按list处理,全不同按dict处理,这么一想 ...
- objectMaaper 反序列化json字段多于或少于实体处理
两种方式 1 忽略json上未知的字段 设置实体类注解 @JsonIgnoreProperties(ignoreUnknown = true) public class Foo { ... } 2 配 ...
- java并发学习--第四章 JDK提供的线程原子性操作工具类
在了解JDK提供的线程原子性操作工具类之前,我们应该先知道什么是原子性:在多线程并发的条件下,对于变量的操作是线程安全的,不会受到其他线程的干扰.接下来我们就学习JDK中线程的原子性操作. 一.CAS ...