Java中线程和线程池
Java中开启多线程的三种方式
1、通过继承Thread实现
public class ThreadDemo extends Thread{
public void run(){
System.out.println("extends Thread");
}
}
ThreadDemo th=new ThreadDemo();
th.start();
2、implements Runnable 这种方式使用较多,面向接口可以多实现
public class ThreadRunableDemo implements Runnable {
public void run() {
System.out.println("implements Runnable");
}
}
Thread thread=new Thread(new ThreadRunableDemo());
thread.start();
//可以采用匿名对象的方式就不用再创建类了
Thread thread2=new Thread(new Runnable() {
public void run() {
System.out.println("匿名对象形式");
}
});
thread2.start();
3、通过实现Callable接口+Future
public class ThreadCallable implements Callable<String> {
public String call() throws Exception {
return "aaaa";
}
}
Callable<String> callable = new ThreadCallable();
FutureTask<String>futureTask=new FutureTask<String>(callable);
//会阻塞线程
futureTask.get();
关于Runable和Callable的区别
https://blog.csdn.net/heyutao007/article/details/19072675
java中线程池
ExecutorService es = Executors.newFixedThreadPool(2);
es.submit(new Runnable() {
public void run() {
System.out.println(Thread.currentThread().getName());
}
});
es.submit(new Runnable() {
public void run() {
System.out.println(Thread.currentThread().getName());
}
});
线程安全
synchronized 同步
# 同步代码块
synchronized (obj) {}
# 同步方法
public synchronized void DT() {}
锁(jdk1.5后)
private Lock lock = new ReentrantLock();
lock.lock();
do something.......
lock.unlock();
https://www.cnblogs.com/CarpenterLee/p/9558026.html
Java中线程和线程池的更多相关文章
- Java中的守护线程 & 非守护线程(简介)
Java中的守护线程 & 非守护线程 守护线程 (Daemon Thread) 非守护线程,又称用户线程(User Thread) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守 ...
- Java中如何创建线程
Java中如何创建线程 两种方式:1)继承Thread类:2)实现Runnable接口. 1.继承Thread类 继承Thread类,重写run方法,在run方法中定义需要执行的任务. class M ...
- Java中的字符串常量池,栈和堆的概念
问题:String str = new String(“abc”),“abc”在内存中是怎么分配的? 答案是:堆内存.(Tips:jdk1.8 已经将字符串常量池放在堆内存区) 题目考查的为Ja ...
- 转载:Java中的字符串常量池详细介绍
引用自:http://blog.csdn.net/langhong8/article/details/50938041 这篇文章主要介绍了Java中的字符串常量池详细介绍,JVM为了减少字符串对象的重 ...
- 详解线程池的作用及Java中如何使用线程池
服务端应用程序(如数据库和 Web 服务器)需要处理来自客户端的高并发.耗时较短的请求任务,所以频繁的创建处理这些请求的所需要的线程就是一个非常消耗资源的操作.常规的方法是针对一个新的请求创建一个新线 ...
- Java中的守护线程和非守护线程(转载)
<什么是守护线程,什么是非守护线程> Java有两种Thread:"守护线程Daemon"(守护线程)与"用户线程User"(非守护线程). 用户线 ...
- java中等待所有线程都执行结束(转)
转自:http://blog.csdn.net/liweisnake/article/details/12966761 今天看到一篇文章,是关于java中如何等待所有线程都执行结束,文章总结得很好,原 ...
- java中等待所有线程都执行结束
转自:http://blog.csdn.net/liweisnake/article/details/12966761 今天看到一篇文章,是关于java中如何等待所有线程都执行结束,文章总结得很好,原 ...
- Java中如何保证线程顺序执行
只要了解过多线程,我们就知道线程开始的顺序跟执行的顺序是不一样的.如果只是创建三个线程然后执行,最后的执行顺序是不可预期的.这是因为在创建完线程之后,线程执行的开始时间取决于CPU何时分配时间片,线程 ...
- Java 中如何实现线程间通信
世界以痛吻我,要我报之以歌 -- 泰戈尔<飞鸟集> 虽然通常每个子线程只需要完成自己的任务,但是有时我们希望多个线程一起工作来完成一个任务,这就涉及到线程间通信. 关于线程间通信本文涉及到 ...
随机推荐
- 走进C++程序世界-----operator new delete 重载
在C++ 的世界里,new 和delete 是keyword.而在C的世界里相相应的malloc和free是函数,关键C++的new和delete分析,详见前面的章节.这里就不在过多的介绍了.链接. ...
- spring boot 使用mybatis-generator
mybatis-generator官网: http://www.mybatis.org/generator/running/runningWithMaven.html 在pom.xml中的 build ...
- php不重新编译添加模块
php不重新编译添加模块 本文以安装mysqli模块为例 一.检查 1:首先保证php-fpm能正常启动 2:查看当前已安装的php模块是否有mysqli [root@web01 ~]# /appli ...
- AForge.NET Framework-2.2.5
http://www.aforgenet.com/framework/downloads.html AForge.NET Framework-2.2.5 简介 AForge.NET是一个专门为开发者和 ...
- kali渗透综合靶机(一)--Lazysysadmin靶机
kali渗透综合靶机(一)--Lazysysadmin靶机 Lazysysadmin靶机百度云下载链接:https://pan.baidu.com/s/1pTg38wf3oWQlKNUaT-s7qQ提 ...
- How to Start a New Cocos2d-x Game for version 3.0
This documentation will show you how to use cocos console to create and run a new project. Runtime R ...
- http://www.bootcss.com/p/font-awesome/design.html
http://www.bootcss.com/p/font-awesome/design.html <li class="active"> <div class= ...
- 【ExtAspNet学习笔记】ExtAspNet控件库中常见问题
1.在Grid控件中添加CheckBoxField控件,选择一行时,如何获取选择的CheckBoxField所对应记录的唯一标识值? ●解决方案: 在前台Grid控件中, 添加“<ext:Che ...
- Atitit.常见的4gl 第四代编程语言 与 dsl
Atitit.常见的4gl 第四代编程语言 与 dsl 1. 4gl dsl发展历史1 2. 4gl dsl的特点1 3. 常见的4gl 第四代编程语言 dsl2 4. 未来趋势与标准2 4.1.1 ...
- Git--Bug解决篇
Git--公司bug解决篇 作为程序员,我们时常遇到这样的场景,公司的产品上线了,程序员们美滋滋的开始开发新功能希望得到更多的流量.这时候,公司上线的产品发生了很严重的bug,可是我们已经在这个bug ...