来源XXX,免得打广告嫌疑。

http://www.cnblogs.com/whgw/archive/2011/10/03/2198506.html

今天看了文章才发现创建线程最佳方式为实现Runnable接口,之前的习惯要改鲁。

http://blog.csdn.net/imzoer/article/details/8500670

Java中Timer的用法

package timer;import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;public class TimerTest {static Timer timer = new Timer();public static void main(String[] args) {// task task to be scheduled.// delay delay in milliseconds before task is to be executed.// period time in milliseconds between successive task executions.timer.schedule(new MyTimerTask(), 2000);}}
/** 执行间隔2秒与4秒交替进行*/
class MyTimerTask extends TimerTask {static boolean change = true;Calendar calendar = Calendar.getInstance();@Overridepublic void run() {change = !change;System.out.println(calendar.getTime());new Timer().schedule(new MyTimerTask(), change ? 2000 : 4000);}}

线程安全的在于多线程对同一资源对象的读、写、事务完成阶段。

http://www.cnblogs.com/mengdd/archive/2013/02/16/2913806.html

java synchronized关键字详解

弄明白synchronized这个关键字在不同情况锁住的对象粒度,以及范围。

package Thread;/*** 子线程2次,主线程4次交替循环10次。**/
public class AlternateLoop {static Sysout sysout = new Sysout();public static void main(String[] args) {for (int i = 0; i < 10; i++) {sysout.subBusiness(i);sysout.mainBusiness(i);}}}// class MyThread implements Runnable {
// @Override
// public void run() {
// AlternateLoop.sysout.subBusiness(1);
// }
// }
//
// class MyThread2 implements Runnable {
//
// @Override
// public void run() {
// AlternateLoop.sysout.mainBusiness(i);
// }
// }/** 同一资源管理业务逻辑*/
class Sysout {private boolean isSub = true;public synchronized void mainBusiness(int i) {while (isSub) {try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}for (int j = 0; j < 4; j++) {System.out.println("mainBusiness" +j+"loop of"+ i);}isSub = true;this.notify();}public synchronized void subBusiness(int i) {while (!isSub) {try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}for (int j = 0; j < 2; j++) {System.out.println("subBusiness" +j+"loop of"+ i);}isSub = false;this.notify();}
}

Java并发编程:深入剖析ThreadLocal

每个线程存在对应的线程副本对象。

package Thread;import java.util.Random;public class ThreadLocalTest {public static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>();public static void main(String[] args) {for (int i = 0; i < 2; i++) {new Thread(new Runnable() {@Overridepublic void run() {int data=new Random().nextInt();System.out.println(Thread.currentThread().getName()+"has put data :"+data);threadLocal.set(data);new A().get();new B().get();}}).start();}}static class A {public void get() {int data=threadLocal.get();System.out.println("A from Thread" + Thread.currentThread().getName() + ""+ data);}}static class B {public void get() {int data=threadLocal.get();System.out.println("B from Thread" + Thread.currentThread().getName() + ""+ data);}}
}

上面的例子需要改造一下 这种内部静态类用起来不科学啊。

java线程:Atomic(原子的)  jdk 1.5的新特性

Java并发编程:线程池的使用

package Thread;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;public class ThreadPoolTest {public static void main(String[] args) {ExecutorService threadPool =Executors.newCachedThreadPool();
//        ExecutorService threadPool =Executors.newFixedThreadPool(10);
//        ExecutorService threadPool = Executors.newSingleThreadExecutor();for (int i = 0; i < 10; i++) {final int task = 1;threadPool.execute(new Runnable() {@Overridepublic void run() {for (int j = 0; j < 10; j++) {try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+ "is looping of " + j + "for task of" + task);}}});}Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {System.out.println("bombing!");}}, 6, 2, TimeUnit.SECONDS);}
}

转载于:https://www.cnblogs.com/linkarl/p/4808838.html

Java多线程与并发库高级应用 学习笔记 1-9课相关推荐

  1. Java多线程与并发库高级应用--18_传智播客_张孝祥_java5阻塞队列的应用

    Java多线程与并发库高级应用--18_传智播客_张孝祥_java5阻塞队列的应用 原创:徐工 2018-5- 5 17.10 package cn.itcast.heima2; import jav ...

  2. Java多线程与并发库高级应用架构

    张孝祥_Java多线程与并发库高级应用 [视频介绍:] Java线程是一项非常基本和重要的技术,在偏底层和偏技术的Java程序中不可避免地要使用到Java线程技术,特别是android手机程序和游戏开 ...

  3. JAVA Java多线程与并发库

    Java多线程与并发库 同步方式 import javax.xml.stream.events.StartDocument;public class TestSynchronized {public ...

  4. java定时器 并发_【java多线程与并发库】— 定时器的应用 | 学步园

    定时器的应用 1.  定时器主要涉及到两个类(java.util包中) @->public class Timer extendsObject (一种工具,线程用其安排以后在后台线程中执行的任务 ...

  5. Java多线程与线程并发库高级应用笔记

    以下内容是学习张老师Java多线程与线程并发库高级应用时所做的笔记,很有用 网络编辑器直接复制Word文档排版有点乱,提供原始文件下载 先看源文件概貌 张孝祥_Java多线程与并发库高级应用 [视频介 ...

  6. Java 多线程与并发编程专题

    Java 线程基础 Java 多线程开发 线程安全与同步 并发控制 非阻塞套接字(NIO) Java 5 中的并发 JDK 7 中的 Fork/Join 模式 相关书评 Java 平台提供了一套广泛而 ...

  7. java书籍_还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!

    点击蓝色"程序员书单"关注我哟 加个"星标",每天带你读好书! ​ 在介绍本书单之前,我想先问一下各位读者,你们之前对于Java并发编程的了解有多少呢.经过了1 ...

  8. 《Java并发编程实践》学习笔记之一:基础知识

    <Java并发编程实践>学习笔记之一:基础知识 1.程序与进程 1.1 程序与进程的概念 (1)程序:一组有序的静态指令,是一种静态概念:  (2)进程:是一种活动,它是由一个动作序列组成 ...

  9. JAVA多线程和并发基础面试问答(转载)

    JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...

最新文章

  1. Jenkins遇到问题一:jenkins配置权限不对导致无法登陆或者空白页面解决办法
  2. ATM信元的交换方式为?
  3. 【正一专栏】亚冠抽签点评——上港令人期待
  4. 第18课:模型部署上线的几种服务发布方式
  5. thinkphp6企业项目实战_[MarsZ]ThinkPHP项目实战总结
  6. python如何安装第三方库
  7. OCEval-动态执行ObjectiveC的热修复方案
  8. Activity保存状态saving activity state和onPause()
  9. 数据挖掘入门到精通—R语言视频教程
  10. DoNet6新特性 Enumerable.Chunk()
  11. OCR算法识别性能评估
  12. 一个屌丝程序猿的人生(十五)
  13. opencv 拍摄并保存照片
  14. 怎么把wav转换成mp3格式,5种方法值得收藏
  15. 基于单片机定时闹钟设计
  16. DataTable的行列转换及多表头HTML表格转Excel
  17. 聊聊WPF中字体的设置
  18. 神经网络最本质的理论基础是什么?
  19. ubuntu下小企鹅输入法fcitx安装,以及重启后无法使用的问题解决
  20. Oracle 的 Round函数

热门文章

  1. 爆发前的最后按钮 白鹭推HTML5首款生态产品Egret Runtime
  2. 查看http的并发请求数与其TCP连接状态
  3. PL/SQL Developer启动时报错:“Control 'dxDockBrowserPanel' has no parent window
  4. 使用CEfSharp之旅(8)CEFSharp 使用代理 更换位置IP
  5. LOJ#6085. 「美团 CodeM 资格赛」优惠券(set)
  6. OSGI 插件操作命令
  7. QTP - 描述性编程
  8. 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
  9. android_launcher的源码详细分析
  10. Java -- 注解 annotation