共享性
多线程 *** 作同一个数据,产生线程安全问题
新建一个类ShareData
设计一个int 型的成员变量count
设计一个成员方法addCount(),把count变量++
在main函数中开启多个线程 *** 作这个成员变量,在main函数里
获取ShareData对象,new 出来
使用for循环10次,在循环中开启线程,模拟10个线程并发,在循环内
获取Thread对象,new出来,构造函数参数:Runable对象
匿名内部类实现Runable接口,重写run()方法
调用Thread.sleep(1000),使线程睡眠一秒,增加出现问题的概率
使用for循环100次,调用addCount()方法
调用Thread.sleep(3),主程序睡眠3秒,保证上面的线程全部执行完了
打印count变量
调用Thread对象的start()方法
package com.tsh.mthread;public class Home { int count; static voID main(String[] args) { final Home home = new Home(); for (int i = 0; i < 10; i++) { Thread t = new Thread( Runnable() { @OverrIDe run() { int j = 0; j < 100; j++) { home.addCount(); } try { Thread.sleep(1000); } catch (Exception e) { e.printstacktrace(); } System.out.println(Thread.currentThread()+":"+home.count); } }); t.start(); } // 睡三秒等等上面的 { Thread.sleep(3000); } (Exception e) { e.printstacktrace(); } System.out.println("总计:" + home.count); } addCount() { count++; }}
互斥性
使用synchronized关键字修饰上面的addCount()方法,当前线程 *** 作时加把锁,同时只允许一个访问者对资源进行访问,具有唯一性和排他性
synchronized ; }
使用synchronized修饰代码块
addCount() { synchronized (this) { count++; } }
总结
以上是内存溢出为你收集整理的[javaSE] 看博客学习java并发编程全部内容,希望文章能够帮你解决[javaSE] 看博客学习java并发编程所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)