两个线程与stringbuffer和stringbuiler以及lock synchronized线程测试
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; public class RunnableTest2 {
// private StringBuilder sb = new StringBuilder();
private StringBuffer sb = new StringBuffer();
inc i1 = new inc();
dec d1 = new dec();
private Lock lock = new ReentrantLock();
private boolean ok = false;
public static void main(String[] args) throws InterruptedException {
RunnableTest2 tr = new RunnableTest2();
double time = System.currentTimeMillis();
for(int i=0;i<1;i++) {
new Thread(tr.i1).start();
new Thread(tr.d1).start(); }
// System.out.println(System.currentTimeMillis()-time);
} private void incc() {
// synchronized(sb) {
lock.lock();
for(int i=0;i<7;i++) {
char at = "freedom".charAt(i);
sb.append(at+""); } System.out.println(Thread.currentThread().getName()+sb.toString());
sb.delete(0, 7);
// }
lock.unlock();
} private void decc() {
// synchronized(sb) {
lock.lock(); for(int i=0;i<7;i++) {
char at = "freedom".charAt(i);
sb.append(at+""); } System.out.println(Thread.currentThread().getName()+sb.toString());
sb.delete(0, 7);
// }
lock.unlock(); } class inc implements Runnable {
public void run() {
// TODO Auto-generated method stub
for(int i=0; i<100000; i++)
incc();
}
} class dec implements Runnable {
public void run() {
// TODO Auto-generated method stub
for(int i=0; i<100000; i++)
decc();
}
}
} 打印结果各有不同
两个线程与stringbuffer和stringbuiler以及lock synchronized线程测试的更多相关文章
- 一个类有两个方法,其中一个是同步的,另一个是非同步的; 现在又两个线程A和B,请问:当线程A访问此类的同步方法时,线程B是否能访问此类的非同步方法?
一个类有两个方法,其中一个是同步的,另一个是非同步的:现在又两个线程A和B,请问:当线程A访问此类的同步方法时,线程B是否能访问此类的非同步方法? 答案:可以 验证 package com.my.te ...
- 一个类,有新增元素(add)和获取元素数量(size)方法。 启动两个线程。线程1向容器中新增数据。线程2监听容器元素数量,当容器元素数量为5时,线程2输出信息并终止
方式一: /** * 两个线程要是可见的所以要加上votalile */public class Test_01 { public static void main(String[] args) { ...
- Java-多线程第三篇3种创建的线程方式、线程的生命周期、线程控制、线程同步、线程通信
1.Java使用Thread类代表线程. 所有的线程对象必须是Thread类或其子类的实例. 当线程继承Thread类时,直接使用this即可获取当前线程,Thread对象的getName() ...
- Java并发1——线程创建、启动、生命周期与线程控制
内容提要: 线程与进程 为什么要使用多线程/进程?线程与进程的区别?线程对比进程的优势?Java中有多进程吗? 线程的创建与启动 线程的创建有哪几种方式?它们之间有什么区别? 线程的生命周期与线程控制 ...
- C#线程 在某一时间内,只有N个线程在并发执行,其余都在队列中的实现(转载)
具体的需求是 在某一时间点,只有N个线程在并发执行,如果有多余的线程,则排队等候~ 还真是费尽心思啊~最终还是被我攻克了~ 下面我就来说说具体的实现 C#提供了Mutex与Interlocked这两个 ...
- C# 线程(三):如何操纵一个线程
From : http://kb.cnblogs.com/page/42529/ 下面我们就动手来创建一个线程,使用Thread类创建线程时,只需提供线程入口即可.(线程入口使程序知道该让这个线程干什 ...
- Qt 线程基础(Thread Basics的翻译,线程的五种使用情况)
Qt 线程基础(QThread.QtConcurrent等) 转载自:http://blog.csdn.net/dbzhang800/article/details/6554104 昨晚看Qt的Man ...
- Java线程:新特征-有返回值的线程
http://lavasoft.blog.51cto.com/62575/222082/ Java线程:新特征-有返回值的线程 2009-11-04 17:33:56 标签:返回值 职场 线程 休闲 ...
- java synchronized 线程同步机制详解
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this ...
随机推荐
- 第一个版本库 Repository
Git安装 Windows系统 Git 为 Windows 系统提供了简易的 .exe 安装包, 直接下载并安装就可以了(点这里->):https://git-scm.com/download/ ...
- 从U盘安装linux(前人踩坑后人乘凉)
今天踩了一个大坑,网上的教程从u盘安装linux少了一个关键步骤导致我挣扎了两个小时 废话不多说,开始需要准备一些东西 1.从官网下载一个Ubuntu 10.04的镜像 2.一个大于等于1G的支持启动 ...
- idea 快捷键及使用技巧
IDEA中经常使用的快捷键: Ctrl+Shift + Enter 语句完成 可以快速在行末添加分号,或添加大括号{} Ctrl+Shift + F 全文查找 需要把搜狗打字的快捷键关掉 Ctrl+A ...
- wireshark抓包分析
TCP协议首部: 分析第一个包: 源地址:我自己电脑的IP,就不放上来了 Destination: 222.199.191.33 目的地址 TCP:表明是个TCP协议 Length:66 表明包的长度 ...
- python 编程测试练习2
1.将A.txt(多行)文件的内容读取出来写入到B.txt中 2.总结 一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 1.得到当前工作目录,即当前Python脚 ...
- 使用jsonp去访问跨域数据,回调使用数据
var foo = function (data) { console.log("foo", data)} var testJsonP = function () { $.ajax ...
- vue element new vue const
new Vue{ el:"app", } ========= const app = new Vue({ router, data:{....} }).$mount('#app') ...
- linux du命令的疑惑
起因是测试rsync传输数据.传输完成后,想看一下传输的文件是不是完整,所以检测了下源目录和目标目录的大小,竟然出现了巨大的差距: [root@w anaconda3]$ du -sh ./ .9G ...
- EclipseError01
1.错误:“javax.servlet.http.httpservlet was not found on the Java Build Path” 1.1. 项目上右键-->Build Pat ...
- GoRails教程自建Rails 的 API; gem 'jbuilder'简单用法;使用JWT进行验证(git上的实做);curl命令使用;status状态码;JWT文档翻译摘录;
API: application programming interface 在Ruby中特指调用某个对象的信息,如hash的方法库library中的方法,参数,回传值等. 视频:如何用Rails 建 ...