文档章节

2017.09.05(2)多线程

h3
 h3
发布于 2017/09/05 17:57
字数 635
阅读 6
收藏 0

在java 中要想实现多线程代码有两种手段,一种是继承 Thread 类,

另一种是实现 Runnable 接口。

Thread 类是在 java.lang 包中定义的,一个类只继承了 Thread 类,此类就称为多线程操作类。

在Thread 子类中,必须明确地覆写 Thread 类中的 run() 方法,此方法为线程的主体。

正确地启动线程,必须调用从 Thread 类中继承而来的 start() 方法。

一个类通过继承 Thread 类来实现,那么只能调用一次 start() 方法,如果多次调用将会抛出。。导演

实现 Runnable 接口

在 Java 中也可能通过实现 Runnable 接口的方式实现多线程,Runnable接口中只定义了一个抽象方法

public void run();

在 Thread 类中,提供了 public Thread(Runnable target)  和 public Thread(Runnable target,String name) 两个构造方法,来接收 Runnable 的子类实例对象

所以: new Thread(Runnable 的子类对象).start();

要想实现多线程,必须在主线程中创建新的线程对象。任何线程一般具有5种状态,即:创建、就绪、运行、阻塞、终止。

在 Thread 类中可以通过 getName() 方法取得线程的名称,还可以通过 setName() 方法设置线程的名称

在线程操作中,可以使用 join() 方法让一个线程强制运行,线程强制运行期间,其他线程无法运行,必须等待此线程完成之后才可以继续执行。

直接使用 Thread.sleep() 方法即可实现休眠。

当一个线程运行时,另外一个线程可以直接通过 interrupt() 方法中断其运行状态。

在 Java 程序中,只要前台有一个线程在运行,则整个 Java 进程都不会消失,所以此时可以设置一个后台线程,这样即使 Java 进程结束了,此后台线程依然会继续执行。要想实现宋的操作,直接使用 setDaemon() 方法即可。

class MyThread implements Runnable{
	public void run(){
		while(true){
			System.out.println(Thread.currentThread().getName() + "在运行");
		}
	}
}
public class Task33{
	public static void main(String args[]){
		MyThread my = new MyThread();
		Thread t1 = new Thread(my,"线程");
		t1.setDaemon(true);
		t1.start();
		System.out.println("主方法结束了吧");
	}
}

在线程的操作中,也可以使用 yield() 方法将一个线程的操作暂时让给其他线程执行。

同步代码块与同步方法

同步代码块格式:synchronized(同步对象){ 需要同步的代码;}

同步方法格式:synchronized 方法返回值 方法名称(参数列表){ 方法主体 }

 

 

 

© 著作权归作者所有

共有 人打赏支持
h3

h3

粉丝 6
博文 47
码字总数 16408
作品 0
福州
程序员
私信 提问
Android多线程:继承Thread类 & 实现Runnable接口 使用解析(含实例教程)

前言 在开发中,多线程的使用十分常见 今天,我将全面解析多线程中最常见的2种用法:继承类 & 实现接口 Part 1:继承Thread类 目录 1. 简介 class MyThread extends Thread{ // 步骤2:复写r...

carson_ho
2018/05/30
0
0
秒杀多线程第一篇 多线程笔试面试题汇总

系列前言 本系列是本人参加微软亚洲研究院,腾讯研究院,迅雷面试时整理的,另外也加入一些其它IT公司如百度,阿里巴巴的笔试面试题目,因此具有很强的针对性。系列中不但会详细讲解多线程同...

彭博
2012/04/12
528
0
Posix多线程编程学习笔记

Posix多线程编程学习笔记(一)—线程基础(1) http://blog.chinaunix.net/u/22935/showart_310711.html Posix多线程编程学习笔记(一)—线程基础(2) http://blog.chinaunix.net/u/2293...

晨曦之光
2012/04/13
225
0
多线程的底层实现机制

1.多线程的底层实现 (1)首先回答什么是线程 1个进程要想执行任务,必须得有线程.线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 (2)什么是多线程 1个进程中可以开...

万能的匹诺曹
2016/06/22
38
0
多线程访问共享对象和数据的方式

要实现多线程访问共享对象,一般要将有互斥的代码放在一个类当中。如果多线程中的每个线程执行的代码相同,可以功用一个Runable对象;如果不多线程代码不一致,则需要用多个Runable对象或者多...

moonlightX
2018/05/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

eggjs与sequelize简单demo

参考 egg 官方文档 安装 // 依赖npm install --save egg-sequelize mysql2// ts 类型npm install --save @types/sequelize 插件,config/plugin.ts import { EggPlugin } from 'egg';......

Geeyu
30分钟前
0
0
看过上百部片子的这个人教你视频标签算法解析

本文由云+社区发表 随着内容时代的来临,多媒体信息,特别是视频信息的分析和理解需求,如图像分类、图像打标签、视频处理等等,变得越发迫切。目前图像分类已经发展了多年,在一定条件下已经...

腾讯云加社区
45分钟前
2
0
2. 红黑树

定义:红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树(Binary Search Tree)。 要理解红黑树,先要了解什么是二叉查找树。在上一章中,我们学习了什么是二叉树,以及二叉树...

火拳-艾斯
46分钟前
2
0
input的button类型,点击页面跳转

一、input type=button 不做任何操作 例如: <input type="button" class="btn btn-primary" style="width: 30%" value="返回" onclick="window.location.href='/users/list'"></input> onc......

Sunki
52分钟前
1
0
踩坑:js 小数运算出现精度问题

背景 在学习小程序商城源码时发现了这个问题,单价可能出现小数,小数之间运算结果会莫名其妙多出一大串数字,比如下面这样👇。 在此之前我是知道 js 中著名的 0.1 + 0.2 != 0.3 的问题的,...

dkvirus
57分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部