多线程(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并发编程实战笔记
线程安全性 编写线程安全的代码实质上就是管理对状态的访问,而且通常都是共享的,可变的状态. 一个对象的状态就是他的数据,存储在状态变量中,比如实例域或静态域.所谓共享是指一个对象可以被多个线程访问:所 ...
随机推荐
- [UE4]关卡蓝图
- Linux 下 MQ 的安装
在WebSphere MQ 7.1版本以前,同时只能有一个产品的安装实例,在UNIX和Linux系统上,/usr/lib,/usr/bin和/usr/include目录下会增加一些软连接,也指向了这个 ...
- Linux CentOS7.5上二进制安装MySQL5.7.23
1.下载二进制文件 cd /usr/local/src/ wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.23-linux-glib ...
- javascript-关于赋值的那点事
var ary1=[3,4]; var ary2=ary1; ary2[0]=1; ary2=[6,5] console.log(ary1) console.log(ary2) 个人测试出的结果是:更 ...
- delphi正则表达式学习笔记(三)
Delphi 中经常使用的正则表达式 在 Delphi 中使用正则表达式, 目前 PerlRegEx 应该是首选, 准备彻底而细致地研究它. 官方网站: http://www.regular-e x ...
- 有关Mysql的mysql_store_result函数返回NULL的情况以及其他注意事项
成功调用mysql_query()后,mysql_store_result()能够返回NULL.出现该情况时,表明出现了下述条件之一: · 出现了malloc()故障(例如,如果结果集 ...
- 在线安装CM集群
https://www.cloudera.com/documentation/manager/5-0-x/Cloudera-Manager-Installation-Guide/cm5ig_insta ...
- 快速部署MySQL数据库
一.下载对应的软件版本 下载地址:http://mirrors.sohu.com/mysql/MySQL-5.6/ [root@localhost ~]# wget -q http://mirrors ...
- useful tools and website
1.https://www.processon.com/ 在线流程图制作网站 2.http://www.easyicon.net/ 专门下载图标的网站 3.https://www.lfd.uci ...
- Django中的分页,cookies与session
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...