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的更多相关文章

  1. Java修炼——四种方式解析XML_JDOM

    四种方式解析XML:DOM     JDOM    DOM4J    SAX JDOM使用前需要上传jar包. 先写一个XML栗子: <?xml version="1.0" ...

  2. Java修炼——四种方式解析XML_DOM

    四种方式解析XML:DOM      JDOM   DOM4J    SAX 先写一个XML栗子: <?xml version="1.0" encoding="UT ...

  3. Java修炼——四种方式解析XML_SAX

    四种方式解析XML:DOM      JDOM    DOM4J    SAX 先写一个XML栗子: <?xml version="1.0" encoding="U ...

  4. Java修炼——四种方式解析XML_DOM4J

    四种方式解析XML:DOM     JDOM    DOM4J    SAX 注意: DOM4J使用是需要上传jar包的. 先写一个XML栗子: <?xml version="1.0& ...

  5. JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

  6. 创建多线程的第一种方式——创建Thread子类和重写run方法

    创建多线程的第一种方式——创建Thread子类和重写run方法: 第二种方式——实现Runnable接口,实现类传参给父类Thread类构造方法创建线程: 第一种方式创建Thread子类和重写run方 ...

  7. Java中实现多线程的四种方式

    Java多线程实现方式主要有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来创建Thread线程.使用ExecutorService.Cal ...

  8. java多线程的四种实现方式

    主要有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来创建Thread线程.使用ExecutorService.Callable.Futur ...

  9. java 多线程 1 “常用的实现多线程的2种方式”:Thread 和 Runnable

    转载系列自http://www.cnblogs.com/skywang12345/p/java_threads_category.html 当使用第一种方式(继承Thread的方式)来生成线程对象时, ...

随机推荐

  1. CF 150E Freezing with Style [长链剖分,线段树]

    \(sol:\) 给一种大常数 \(n \log^2 n\) 的做法 考虑二分,由于是中位数,我们就二分这个中位数,\(x>=mid\)则设为 \(1\),否则为 \(-1\) 所以我们只需要找 ...

  2. js监听滚动结束

    使用setTimeout模拟滚动结束 let scrollTimer; document.addEventListener("scroll", () => { clearTi ...

  3. 代数式到c语言表达式和常用的c语言数学库函数_pow_sqrt_exp_fabs_abs

    数学知识来源于生活,因此我们需要把相关的数学的知识在自己生活找到实例. #include "common.h" #include <stdio.h> #include ...

  4. Mac下git的安装配置以及gerrit初次使用

    1.Mac下git下载 在终端首次运行git命令,若未安装,会提示下载开发者工具Xcode,根据提示下载即可: 2.查看git版本 git version 2.首次使用git配置 git config ...

  5. 项目在UAP可以直接启动,但是在eclipse上面不能直接启动

    上面两个eclipse都是用友的开发人员给我的,左边是驻场开发给我的,但是没有教我怎么用和哪里好用,所以一直用UAP来做开发.右边的eclipse是提ISM问题,北京用友远程调试问题时给我的,而且终于 ...

  6. JavaScript-跨浏览器事件处理程序(EventUtil)

    事件操作对象: var EventUtil= { //添加事件 addHandler: function (element, type, handler) { if (element.addEvent ...

  7. 使用vegrant安装centos7

    1.首先去安装需要先安装好 Vagrant 和 VirtualBox. 安装好需要重启电脑. 可能网速会很慢,建议复制链接到迅雷下载,或者国内随便找个下载也可以. 2.在电脑创建vagrant_vm目 ...

  8. ASP.NET Identity登录原理

    https://www.cnblogs.com/jesse2013/p/aspnet-identity-claims-based-authentication-and-owin.html 如何实现登录 ...

  9. Python GUI编程(TKinter)(简易计算器)

    搞课设搞得心累,现在看到人脸这两个字就烦躁,无聊搞搞tkinter,实现一个计算器的功能,能够简单的加减乘除. 简单的页面如下: 简单的代码如下: # encoding:utf-8 import tk ...

  10. nginx 配置 强制访问https

    使用nginx的301状态码 server { listen ;     if ($scheme = 'http') {    return 301 https://$server_name$requ ...