java 多线程实现四种方式解析Thread,Runnable,Callable,ServiceExcutor,Synchronized ,ReentrantLock
1.Thread实现:
import java.util.Date;
import java.text.SimpleDateFormat; public class MyThread extends Thread{
@Override
public void run(){ SimpleDateFormat strf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String d = strf.format(new Date());// new Date()为获取当前系统时间
System.out.println(d+" "+Thread.currentThread().getName()); } public static void main(String[] args) {
// MyThread myThread = new MyThread();
for (int i = 0; i < 10; i++) {
new MyThread().start(); } }
}
2020-01-23 21:15:54 Thread-1
2020-01-23 21:15:54 Thread-8
2020-01-23 21:15:54 Thread-7
2020-01-23 21:15:54 Thread-5
2020-01-23 21:15:54 Thread-4
2020-01-23 21:15:54 Thread-3
2020-01-23 21:15:54 Thread-0
2020-01-23 21:15:54 Thread-2
2020-01-23 21:15:54 Thread-6
2020-01-23 21:15:54 Thread-9
2.Runnable :
class MyRunnable implements Runnable {
int i =0;
@Override
public void run(){
System.out.println(Thread.currentThread().getName()+" "+ i++);
}
public static void main(String[] args) {
Runnable implRunnable = new MyRunnable();
// Thread thread = new Thread(implRunnable);
for (int i = 1; i <5 ; i++) {
// new Thread(implRunnable).start(); // int i全局线程操作共享
new Thread(new MyRunnable()).start(); // int i 变量线程操作独立,
}
}
}
3. Callable:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask; public class MyCallable implements Callable<Object> { @Override
public Object call() throws Exception{
int result =0 ;
for (int j = 0; j <8 ; j++) {
result +=j;
}
System.out.println(Thread.currentThread().getName());
return result;
} public static void main(String[] args) throws InterruptedException, ExecutionException {
for (int i = 0; i <5 ; i++) {
Callable<Object> callable = new MyCallable() ;
FutureTask<Object> futureTask = new FutureTask<Object>(callable);
new Thread(futureTask).start();
System.out.println(futureTask.get()); } } }
Thread-0
28
Thread-1
28
Thread-2
28
Thread-3
28
Thread-4
28
4.ThreadPool使用同步原语,重入锁,同步代码块,代码类,或者对象,对基本数据类型无效:
import java.util.concurrent.locks.ReentrantLock;
public class SynchronizedTest implements Runnable {
private int i =10;
// synchronized mean block one thread opt some var util other th have fish some operation ;
@Override
public void run() {
//或者同步代码块 Integer Object ,int是基本数据类型,不是object;
//synchronized(SychronizeTest.class) {
ReentrantLock RLock = new ReentrantLock();
RLock.lock();
if (i >= 1) {
try {
Thread.sleep(100);
i--;
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " " + i);
} else {
System.out.println("库存不足");
}
RLock.unlock();
//}
}
public static void main(String[] args) throws Exception{
Runnable runnable = new SynchronizedTest();
for (int i = 0; i < 20; i++) {
new Thread(runnable).start();
}
Thread.sleep(3000);
}
}
java 多线程实现四种方式解析Thread,Runnable,Callable,ServiceExcutor,Synchronized ,ReentrantLock的更多相关文章
- Java修炼——四种方式解析XML_JDOM
四种方式解析XML:DOM JDOM DOM4J SAX JDOM使用前需要上传jar包. 先写一个XML栗子: <?xml version="1.0" ...
- Java修炼——四种方式解析XML_DOM
四种方式解析XML:DOM JDOM DOM4J SAX 先写一个XML栗子: <?xml version="1.0" encoding="UT ...
- Java修炼——四种方式解析XML_SAX
四种方式解析XML:DOM JDOM DOM4J SAX 先写一个XML栗子: <?xml version="1.0" encoding="U ...
- Java修炼——四种方式解析XML_DOM4J
四种方式解析XML:DOM JDOM DOM4J SAX 注意: DOM4J使用是需要上传jar包的. 先写一个XML栗子: <?xml version="1.0& ...
- JAVA中的四种JSON解析方式详解
JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...
- 创建多线程的第一种方式——创建Thread子类和重写run方法
创建多线程的第一种方式——创建Thread子类和重写run方法: 第二种方式——实现Runnable接口,实现类传参给父类Thread类构造方法创建线程: 第一种方式创建Thread子类和重写run方 ...
- Java中实现多线程的四种方式
Java多线程实现方式主要有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来创建Thread线程.使用ExecutorService.Cal ...
- java多线程的四种实现方式
主要有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来创建Thread线程.使用ExecutorService.Callable.Futur ...
- java 多线程 1 “常用的实现多线程的2种方式”:Thread 和 Runnable
转载系列自http://www.cnblogs.com/skywang12345/p/java_threads_category.html 当使用第一种方式(继承Thread的方式)来生成线程对象时, ...
随机推荐
- fatal error LNK1169: one or more multiply defined symbols found
在 Project/Setting/Link/General中的 Project Options: 加入 /FORCE:MULTIPLE即可")可以解决报错问题,但是这些问题全部变成了war ...
- C# 将List数据 导出到csv 文件
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Ref ...
- git同步代码至github和gitee(码云)
注:本文出自博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 本文源链接:https://www.cnblogs.com/chloneda/p/git-to-g ...
- vim编辑器未正常关闭时解决方案
目录 vim编辑器未正常关闭时解决方案 问题描述 .swp..swo文件产生原因 解决方案 后记 hosts文件 sudo命令小记 vim编辑器未正常关闭时解决方案 问题描述 在mac上的/etc目录 ...
- 使用touch操作图片
功能: 1.图片放大缩小 2.图片移动 3.图片上做点标记 PS 1.后端程序员不容易,且行且珍惜 2.代码不想封装,累 js代码 /**************************calc pi ...
- 【剑指Offer】04、重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- 推荐15款Google Chrome 插件
Google Chrome是由Google开发的免费网页浏览器.Chrome是化学元素“铬”的英文名称,过去也用Chrome称呼浏览器的外框.Chrome相应的开放源代码计划名为Chromium,而G ...
- 1级搭建类107-Oracle 18c 单实例 FS(华为云)公开
项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列除特定项目目前不对外发布,仅作为博客记录,其他公开.如学员在 ...
- BZOJ 3438 小M的礼物
BZOJ 3438 小M的礼物 Description 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子 有1个(就是可以种一棵作物)(用1. ...
- 拦截器 Filter : js、css、jpg、png等静态资源不被拦截解决方案
方案一: web.xml配置文件拦截范围缩小 ,没有必要 /*的配置拦截项目下所有资源. <filter> <filter-name>Login</filter-name ...