
多线程
envieol
此博客仅作学习记录使用,不涉及盈利
展开
-
2.7volatile关键字
停止不了的异步死循环同步死循环,可以通过实现Runnable接口来解决死循环,但是在64bit JVM还是会出现死循环,所以还是推荐使用volatile关键字解决,同步死循环,介绍volatile之前,做一个异步死循环的例子package com.myThread;public class Thread1 extends Thread { private boolean isR原创 2016-01-18 09:56:55 · 333 阅读 · 0 评论 -
2.5内置类和静态内置类
先来看内置类和静态内置类的使用package com.myObject;public class PublicClass { String p="PublicClass"; public String getP() { return p; } public void setP(String p) { this.p = p; }原创 2016-01-14 17:59:18 · 295 阅读 · 0 评论 -
2.4String的常量池(String池)特性
看一段伪代码String a = "a";String b = "a";String c = new String("a");System.out.println(a==b);//trueSystem.out.println(a==c);//false因为java的String类型会有一个常量池管理String对象,当出现的String对象在String池中不存在时即在String池中创建该原创 2016-01-14 16:49:11 · 425 阅读 · 0 评论 -
2.3静态synchronized同步方法和synchronized(class)代码块
静态synchronized同步方法和synchronized(class)代码块synchronized关键字加到static静态方法就是给Class类上锁,而synchronized(class)同步代码块的作用也是一样的。package com.myObject;public class Object1 { synchronized public void print() {原创 2016-01-14 15:25:39 · 332 阅读 · 0 评论 -
2.2使用synchronized同步语句块
sychronized方法的弊端如果A线程执行的sychronized方法执行一个时间比较长的任务,则B线程需要等待比较长的时间,这是可以用sychronized代码块来解决package com.myObject;public class Object5 { public void mothd() { System.out.println(Thread.c原创 2016-01-14 11:56:31 · 305 阅读 · 0 评论 -
2.1使用synchronized同步方法
方法私有变量是线程安全的线程是否安全的关键问题在于实例中的变量 如果变量是方法的私有变量,则是线程安全的package com.test;import com.myObject.Object1;import com.myThread.Thread1a;import com.myThread.Thread1b;public class Test1 { public static void原创 2016-01-13 15:56:24 · 321 阅读 · 0 评论 -
1.5线程优先级
在操作系统中,优先级越高的线程,其任务会优先被CPU执行在Java中使用setPriority()来设置线程优先级,优先级分为[1,2…9,10]十个等级,超出此范围则会抛出异常线程优先级能“继承” // 测试1 System.out.println("main begin:" + Thread.currentThread().getPriority());原创 2016-01-13 10:39:20 · 217 阅读 · 0 评论 -
1.4线程暂停
暂停线程可以用suspend() 恢复线程可以用resume() 但是这两个方法都已经过期作废正常使用suspend和resumepackage com.myThread;public class Thread1 extends Thread { long i = 0; public Thread1() { } public long getI() {原创 2016-01-12 19:14:25 · 260 阅读 · 0 评论 -
1.3线程停止
三种方法 1)stop(),这个方法不安全,所以这方法已过期作废了,不建议使用 2)使用退出标志,使线程正常退出,也就是当run方法完成后线程终止 3)使用interrupt()方法中断线程,但这个方法不会终止一个正在运行的线程,还需要加入一个判断才可以完成线程停止interrupt()仅是停止标志interrupt()只是一个停止标志,并不真正停止线程package com.myThread原创 2016-01-12 17:40:25 · 320 阅读 · 0 评论 -
1.2线程常用方法
currentThread()可以返回代码段正在被哪个线程调用package com.myThread;public class Thread1 extends Thread { public Thread1() { System.out.println("construction this:" + this.currentThread().getName());原创 2016-01-12 17:38:14 · 332 阅读 · 0 评论 -
1.1使用多线程
继承Thread类package com.myThread;public class MyThread1 extends Thread{@Overridepublic void run() { super.run(); System.out.println("hello this is myThread");}}package com.test;imp原创 2016-01-12 17:28:19 · 339 阅读 · 0 评论 -
3.6线程间的通信:字节流与字符流
管道流(pipeStream)是一种特殊的流,用于线程间的通信。 字节流:PipedInputStream和PipedOutputStream 字符流:PipedReader和PipedWriter字节流package com.myObject;import java.io.IOException;import java.io.PipedInputStream;public class Rea原创 2016-01-19 13:57:49 · 421 阅读 · 0 评论 -
3.5生产者与消费者
多生产者与多消费者-操作值:假死假死 是所有线程都进入了waiting状态下面是一个假死的例子package com.myObject;public class ProducerObject { private String lock; public ProducerObject(String lock) { this.lock = lock;原创 2016-01-19 11:18:05 · 405 阅读 · 0 评论 -
3.4wait的条件发生变化导致逻辑错误
若wait的条件需要发生变化是,需要注意程序逻辑的变化下面有个错误例子package com.myObject;public class AddObject { private String lock; public AddObject(String lock) { this.lock = lock; } public void add() {原创 2016-01-18 16:47:20 · 364 阅读 · 0 评论 -
3.3wait(long)
使用wait(long),可以使线程超过某个时间自动唤醒,在等待的过程中也可以被notify()唤醒原创 2016-01-18 15:41:40 · 626 阅读 · 0 评论 -
3.2notify和notifyAll
notify一次只能通知一个wait线程,有多少个wait就需要多少个notify,如果少了,就会出现有线程因为没有通知而一直处于wait。这个时候可以使用notifyAllpackage com.myObject;public class Object3 { public void mothd1(Object lock) { synchronized (lock) {原创 2016-01-18 15:25:02 · 249 阅读 · 0 评论 -
3.1等待/通知机制(wait/notify)
wait/notify 要点 wait() 执行前 在调用wait()之前,必须先要获得对象锁,即只有在同步方法或者同步代码块中调用wait()方法。 执行作用 wait()使进程进入等待(阻塞状态),在收到通知或者被中断之前都会进入预执行队列。 执行之后1 执行wait()之后,当前线程释放改对象锁,在通知前与其他线程重新竞争资源 执行之后2 执行wait()原创 2016-01-18 15:18:26 · 679 阅读 · 0 评论 -
2.6锁对象的改变
只要对象不变,即使对象的属性被改变,运行的结果还是同步 例如:如果A线程执行mothdA,即使B线程在等待user对象锁的过程中,A执行到(1),B还是获取不了锁,因为对象没有改变伪代码...public void mothdA(User user){... synchronized(user){ ... user.setName("A");//(1) ...原创 2016-01-15 13:33:47 · 210 阅读 · 0 评论