多线程(Java)
Thread 类 和 Runnable 接口
在Java中实现多线程有两种方法
- 继承 Thread 类
优点:通过覆盖Thread 类的方法,可以改变线程的行为。 - 实现 Runnable 接口
优点:不需要继承Thread类,可以继承其他类。
package threads.samples3;
public class ThreadTest {
public static void main(String[] args) {
// 创建 Thread 子类的实例
Thread1 t1 = new Thread1();
// 创建实现了 Runnable 接口的类的实例,将其作为参数传给 Thread 类的实例
Thread t2 = new Thread(new Runnable1());
// 通过调用 start 方法启动线程
t1.start();
t2.start();
}
}
class Thread1 extends Thread {
@Override
public void run() {
for(int i = 0; i < 3; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(i + " in Thread1");
}
}
}
class Runnable1 implements Runnable {
@Override
public void run() {
for(int i = 0; i < 3; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(i + " in Runnable1");
}
}
}
/*
0 in Thread1
0 in Runnable1
1 in Runnable1
1 in Thread1
2 in Runnable1
2 in Thread1
*/
Thread 类常用方法
- sleep 方法 :Thread.sleep(1000) 当前线程休眠一秒钟。
- join 方法:mt.join() 让当前线程等待mt线程运行终止。
- interrupt 方法:mt.interrupt() 中断mt线程的运行。
synchronized 关键字
- 在代码块前面加上 synchronized(同步) 关键字并且指定某个需要同步的对象,可以实现该代码块被执行期间指定对象的线程同步和线程安全。
- 排他锁:加上 synchronized 关键字的代码块在被某个线程执行期间,所指定的同步对象将被加上排他锁。代码块执行完毕,同步对象的排他锁将被解除。
- 线程同步:在同步对象的排他锁被解除之前,任何企图执行加上了 synchronized 关键字并且指定相同同步对象的代码块的线程都将处于阻塞状态。只有在同步对象的排他锁被解除之后,这些代码块才能被执行。
- 线程安全:加上 synchronized 关键字的代码块任何时候都不会同时被两个以上的线程执行,即这些代码块是线程安全的。
多线程(Java)的更多相关文章
- 多线程Java Socket编程示例
package org.merit.test.socket; import java.io.BufferedReader; import java.io.IOException; import jav ...
- 多线程java的concurrent用法详解(转载)
我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便.而当针对高质量Java ...
- java多线程-Java中的Copy-On-Write容器
Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改, ...
- 多线程Java Socket编程示例(转)
这篇做为学习孙卫琴<<Java网络编程精解>>的学习笔记吧.其中采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送 ...
- java核心-多线程-Java多线程编程涉及到包、类
Java有关多线程编程设计的类主要涉及两个包java.lang和java.util.concurrent两个包 java.lang包,主要是线程基础类 <1>Thread <2> ...
- 多线程Java Socket编程
采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送请求. 1.服务端 package localSocket; import java.i ...
- 多线程--Java
多线程: 1.进程和线程 进程是资源分配的最小单位,线程是CPU调度的最小单位. 每个进程的创建都需要系统为其开辟资源内存空间,并发执行的程序在执行过程中分配和管理资源的基本单位,速度和销毁也较慢.进 ...
- Java多线程-Java多线程概述
第一章 Java多线程概述 线程的启动 线程的暂停 线程的优先级 线程安全相关问题 1.1 进程与线程 进程:可以将运行在内存中的程序(如exe文件)理解为进程,进程是受操作系统管理的基本的运行单元. ...
- 2.1多线程(java学习笔记) java中多线程的实现(附静态代理模式)
一.多线程 首先我们要清楚程序.进程.线程的关系. 首先进程从属于程序,线程从属于进程. 程序指计算机执行操作或任务的指令集合,是一个静态的概念. 但我们实际运行程序时,并发程序因为相互制约,具有“执 ...
- 多线程-java并发编程实战笔记
线程安全性 编写线程安全的代码实质上就是管理对状态的访问,而且通常都是共享的,可变的状态. 一个对象的状态就是他的数据,存储在状态变量中,比如实例域或静态域.所谓共享是指一个对象可以被多个线程访问:所 ...
随机推荐
- C# DataReader
//1 连接字符串 string connectionString = "server=127.0.0.1;integrated security=true;database=MSPetSh ...
- oracle查看和替换含不可见字符(空白)
select lengthb('1397256'), dump('1397256') from dual; select ascii('') from dual; ), '') from dua ...
- C# WPF 进度条,根据读取数据显示进度条进度,根据Excel文件读取数据,进度条样式
后台代码: //导入 private void Border_MouseLeftButtonUp_2(object sender, MouseButtonEventArgs e) { var path ...
- C# .NET ToList()分页
ViewData.Model = Limodel.ToList().Skip((page - ) * ).Take().ToList(); //page 当前页,10:每页几条数据
- c#,Model 实体转json,字符串转json
public class JsonF { #region 字符串转json /// <summary> /// 字符串转json /// </summary> /// < ...
- RBAC表
--权限管理1 CREATE TABLE SystemLog--日志表 ( Id ,) PRIMARY KEY,--主键id UserName ) NOT NULL,--用户名称,创建日志的用户名称 ...
- tornado-5.1版本
server.py python server.py执行 import tornado.ioloop import tornado.options import tornado.web from to ...
- oracle数据库tns配置方法详解
TNS简要介绍与应用 Oracle中TNS的完整定义:transparence Network Substrate透明网络底层,监听服务是它重要的一部分,不是全部,不要把TNS当作只是监听器. TNS ...
- ubuntu 14.04 安装 Apache Thrift 0.10
1.到官网下载源码压缩文件 https://thrift.apache.org/download 2.安装依赖软件,可以参考 https://thrift.apache.org/docs/instal ...
- 高程三 BOM 读书笔记
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...