多线程学习示例代码
解决高并发
数据同步
Java线程具有五中基本状态
- 新建状态(New):当线程对象对创建后,即进入了新建状态,如:
Thread t = new MyThread();
- 就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了
t.start()
此线程立即就会执行; - 运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。注:就 绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中;
- 阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同,阻塞状态又可以分为三种:
1.等待阻塞:运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态;
2.同步阻塞 -- 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态;
3.其他阻塞 -- 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
- 死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
Bank.class
package com.mylzs.cn.sync_bank;
import java.util.Random;
/**
* 私人银行
* Created by Administrator on 17/11/9.
*/
public class Bank {
private int sum;//总金额
//存钱
public void add(int num){
System.out.print(Thread.currentThread().getName()+"存入" + num+" ");
sum+=num;
System.out.println("总数: "+sum);
}
}
Save.class
package com.mylzs.cn.sync_bank;
import java.util.Random;
/**
* 存钱操作
* Created by Administrator on 17/11/9.
*/
public class Save implements Runnable {
//找到对应的银行
private Bank bank=new Bank();
//存钱操作
public void saveMoney(){
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(new Random().nextInt(10)*10);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(this){ bank.add(100);}
}
}
@Override
public void run() {
saveMoney();
}
}
ATM.class
package com.mylzs.cn.sync_bank;
/**
* Created by Administrator on 17/11/9.
*/
public class ATM {
public static void main(String[] args) {
Save save=new Save();
//ATM机一号
Thread thread1=new Thread(save);
//ATM机二号
Thread thread2=new Thread(save);
//同时开始存钱
thread1.start();
thread2.start();
}
}
存钱结果
D:\zscool\java_jdk\bin\java -Didea.launcher.port=7532 "-Didea.launcher.bin.path=D:\zscool\javaIDEA\IntelliJ IDEA 2016.3.4\bin" -Dfile.encoding=UTF-8 -classpath "D:\zscool\java_jdk\jre\lib\charsets.jar;D:\zscool\java_jdk\jre\lib\deploy.jar;D:\zscool\java_jdk\jre\lib\ext\access-bridge-64.jar;D:\zscool\java_jdk\jre\lib\ext\cldrdata.jar;D:\zscool\java_jdk\jre\lib\ext\dnsns.jar;D:\zscool\java_jdk\jre\lib\ext\jaccess.jar;D:\zscool\java_jdk\jre\lib\ext\jfxrt.jar;D:\zscool\java_jdk\jre\lib\ext\localedata.jar;D:\zscool\java_jdk\jre\lib\ext\nashorn.jar;D:\zscool\java_jdk\jre\lib\ext\sunec.jar;D:\zscool\java_jdk\jre\lib\ext\sunjce_provider.jar;D:\zscool\java_jdk\jre\lib\ext\sunmscapi.jar;D:\zscool\java_jdk\jre\lib\ext\sunpkcs11.jar;D:\zscool\java_jdk\jre\lib\ext\zipfs.jar;D:\zscool\java_jdk\jre\lib\javaws.jar;D:\zscool\java_jdk\jre\lib\jce.jar;D:\zscool\java_jdk\jre\lib\jfr.jar;D:\zscool\java_jdk\jre\lib\jfxswt.jar;D:\zscool\java_jdk\jre\lib\jsse.jar;D:\zscool\java_jdk\jre\lib\management-agent.jar;D:\zscool\java_jdk\jre\lib\plugin.jar;D:\zscool\java_jdk\jre\lib\resources.jar;D:\zscool\java_jdk\jre\lib\rt.jar;E:\JAVA-WEB\Untitled_Demo_Java\out\production\Untitled_Demo_Java;D:\zscool\javaIDEA\IntelliJ IDEA 2016.3.4\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain com.mylzs.cn.sync_bank.ATM
Thread-0存入100 总数: 100
Thread-1存入100 总数: 200
Thread-0存入100 总数: 300
Thread-1存入100 总数: 400
Thread-0存入100 总数: 500
Thread-0存入100 总数: 600
Thread-1存入100 总数: 700
Thread-1存入100 总数: 800
Thread-0存入100 总数: 900
Thread-0存入100 总数: 1000
Thread-1存入100 总数: 1100
Thread-0存入100 总数: 1200
Thread-1存入100 总数: 1300
Thread-0存入100 总数: 1400
Thread-0存入100 总数: 1500
Thread-1存入100 总数: 1600
Thread-0存入100 总数: 1700
Thread-0存入100 总数: 1800
Thread-1存入100 总数: 1900
Thread-0存入100 总数: 2000
Thread-1存入100 总数: 2100
Thread-0存入100 总数: 2200
Thread-1存入100 总数: 2300
Thread-0存入100 总数: 2400
Thread-1存入100 总数: 2500
Thread-1存入100 总数: 2600
Thread-0存入100 总数: 2700
Thread-1存入100 总数: 2800
Thread-0存入100 总数: 2900
Thread-1存入100 总数: 3000
Thread-0存入100 总数: 3100
Thread-0存入100 总数: 3200
Thread-0存入100 总数: 3300
Thread-1存入100 总数: 3400
Thread-0存入100 总数: 3500
Thread-1存入100 总数: 3600
Thread-0存入100 总数: 3700
Thread-1存入100 总数: 3800
Thread-0存入100 总数: 3900
Thread-1存入100 总数: 4000
Thread-0存入100 总数: 4100
Thread-0存入100 总数: 4200
Thread-0存入100 总数: 4300
Thread-1存入100 总数: 4400
Thread-1存入100 总数: 4500
Thread-0存入100 总数: 4600
Thread-1存入100 总数: 4700
Thread-0存入100 总数: 4800
Thread-1存入100 总数: 4900
Thread-0存入100 总数: 5000
Thread-1存入100 总数: 5100
Thread-0存入100 总数: 5200
Thread-0存入100 总数: 5300
Thread-1存入100 总数: 5400
Thread-0存入100 总数: 5500
Thread-1存入100 总数: 5600
Thread-1存入100 总数: 5700
Thread-0存入100 总数: 5800
Thread-1存入100 总数: 5900
Thread-0存入100 总数: 6000
Thread-0存入100 总数: 6100
Thread-1存入100 总数: 6200
Thread-0存入100 总数: 6300
Thread-1存入100 总数: 6400
Thread-0存入100 总数: 6500
Thread-0存入100 总数: 6600
Thread-0存入100 总数: 6700
Thread-1存入100 总数: 6800
Thread-0存入100 总数: 6900
Thread-0存入100 总数: 7000
Thread-1存入100 总数: 7100
Thread-0存入100 总数: 7200
Thread-1存入100 总数: 7300
Thread-0存入100 总数: 7400
Thread-0存入100 总数: 7500
Thread-1存入100 总数: 7600
Thread-1存入100 总数: 7700
Thread-0存入100 总数: 7800
Thread-0存入100 总数: 7900
Thread-0存入100 总数: 8000
Thread-1存入100 总数: 8100
Thread-1存入100 总数: 8200
Thread-0存入100 总数: 8300
Thread-0存入100 总数: 8400
Thread-1存入100 总数: 8500
Thread-0存入100 总数: 8600
Thread-0存入100 总数: 8700
Thread-1存入100 总数: 8800
Thread-1存入100 总数: 8900
Thread-0存入100 总数: 9000
Thread-1存入100 总数: 9100
Thread-1存入100 总数: 9200
Thread-1存入100 总数: 9300
Thread-0存入100 总数: 9400
Thread-0存入100 总数: 9500
Thread-1存入100 总数: 9600
Thread-1存入100 总数: 9700
Thread-0存入100 总数: 9800
Thread-1存入100 总数: 9900
Thread-1存入100 总数: 10000
Thread-0存入100 总数: 10100
Thread-1存入100 总数: 10200
Thread-0存入100 总数: 10300
Thread-1存入100 总数: 10400
Thread-0存入100 总数: 10500
Thread-0存入100 总数: 10600
Thread-1存入100 总数: 10700
Thread-0存入100 总数: 10800
Thread-0存入100 总数: 10900
Thread-1存入100 总数: 11000
Thread-1存入100 总数: 11100
Thread-1存入100 总数: 11200
Thread-0存入100 总数: 11300
Thread-0存入100 总数: 11400
Thread-1存入100 总数: 11500
Thread-0存入100 总数: 11600
Thread-1存入100 总数: 11700
Thread-1存入100 总数: 11800
Thread-1存入100 总数: 11900
Thread-0存入100 总数: 12000
Thread-1存入100 总数: 12100
Thread-1存入100 总数: 12200
Thread-1存入100 总数: 12300
Thread-0存入100 总数: 12400
Thread-0存入100 总数: 12500
Thread-0存入100 总数: 12600
Thread-1存入100 总数: 12700
Thread-1存入100 总数: 12800
Thread-1存入100 总数: 12900
Thread-1存入100 总数: 13000
Thread-0存入100 总数: 13100
Thread-1存入100 总数: 13200
Thread-0存入100 总数: 13300
Thread-1存入100 总数: 13400
Thread-0存入100 总数: 13500
Thread-1存入100 总数: 13600
Thread-0存入100 总数: 13700
Thread-0存入100 总数: 13800
Thread-1存入100 总数: 13900
Thread-1存入100 总数: 14000
Thread-0存入100 总数: 14100
Thread-1存入100 总数: 14200
Thread-0存入100 总数: 14300
Thread-1存入100 总数: 14400
Thread-0存入100 总数: 14500
Thread-1存入100 总数: 14600
Thread-0存入100 总数: 14700
Thread-1存入100 总数: 14800
Thread-0存入100 总数: 14900
Thread-0存入100 总数: 15000
Thread-0存入100 总数: 15100
Thread-0存入100 总数: 15200
Thread-1存入100 总数: 15300
Thread-0存入100 总数: 15400
Thread-0存入100 总数: 15500
Thread-1存入100 总数: 15600
Thread-0存入100 总数: 15700
Thread-1存入100 总数: 15800
Thread-0存入100 总数: 15900
Thread-1存入100 总数: 16000
Thread-1存入100 总数: 16100
Thread-1存入100 总数: 16200
Thread-0存入100 总数: 16300
Thread-0存入100 总数: 16400
Thread-0存入100 总数: 16500
Thread-1存入100 总数: 16600
Thread-1存入100 总数: 16700
Thread-1存入100 总数: 16800
Thread-0存入100 总数: 16900
Thread-1存入100 总数: 17000
Thread-0存入100 总数: 17100
Thread-0存入100 总数: 17200
Thread-0存入100 总数: 17300
Thread-1存入100 总数: 17400
Thread-0存入100 总数: 17500
Thread-1存入100 总数: 17600
Thread-1存入100 总数: 17700
Thread-0存入100 总数: 17800
Thread-1存入100 总数: 17900
Thread-0存入100 总数: 18000
Thread-0存入100 总数: 18100
Thread-1存入100 总数: 18200
Thread-1存入100 总数: 18300
Thread-0存入100 总数: 18400
Thread-1存入100 总数: 18500
Thread-0存入100 总数: 18600
Thread-0存入100 总数: 18700
Thread-1存入100 总数: 18800
Thread-0存入100 总数: 18900
Thread-1存入100 总数: 19000
Thread-0存入100 总数: 19100
Thread-1存入100 总数: 19200
Thread-1存入100 总数: 19300
Thread-1存入100 总数: 19400
Thread-1存入100 总数: 19500
Thread-1存入100 总数: 19600
Thread-1存入100 总数: 19700
Thread-1存入100 总数: 19800
Thread-1存入100 总数: 19900
Thread-1存入100 总数: 20000
Process finished with exit code 0
欢迎加群技术交流234731686

欢迎加群技术交流234731686