public class ThreadTest {
public static void main(String[] args){
// System.out.println("HelloWorld");
Counter c = new Counter();
Thread n1 = new Thread(new Run(c));
n1.setName("n1");
Thread n2 = new Thread(new Run(c));
n2.setName("n2");
n1.start();
n2.start();
/* Thread n3 = new Thread(new Run(c));
n3.setName("n3");
Thread n4 = new Thread(new Run(c));
n4.setName("n4");
Thread n5 = new Thread(new Run(c));
n5.setName("n5");
*/
try{
Thread.currentThread().sleep(1000);
}catch(InterruptedException e){}
/*
Thread st = new SonThread("SonThread start");
st.start();
System.out.println(Thread.currentThread()); //拿到当前的线程
try{
Thread.sleep(1000);
// st.join(); //线程合并
}catch(InterruptedException e){
e.printStackTrace();
}
st.interrupt();
*/
}
}
class Run implements Runnable{
String printText;
Counter c;
Run(String printText){
this.printText = printText;
}
Run(Counter c){
this.c = c;
}
@Override
public void run() {
if(Thread.currentThread().getName().equals("n2")){
c.test2();
}else{
c.test();
}
}
}
class SonThread extends Thread{
String printText;
SonThread(String printText){
this.printText = printText;
}
@Override
public void run() {
yield();
System.out.println(printText);
System.out.println(isAlive());
System.out.println(getPriority());
try{
sleep(5000);
System.out.println("5秒等待完毕!");
}catch(InterruptedException e){
e.printStackTrace();
return;
}
}
@Override
public synchronized void start() {
super.start();
System.out.println("线程启动后我还要干一点事情……");
}
}
class Counter{
private int num = 0;
public void add(){
synchronized(this) {
num++;
System.out.println("当前线程名:" + Thread.currentThread().getName() + " num当前值:" + num);
try {
Thread.currentThread().sleep(5000);
} catch (InterruptedException e) {
}
}
}
public void test(){
synchronized (this){
System.out.println("同步调试");
try {
Thread.currentThread().sleep(5000);
} catch (InterruptedException e) { }
}
}
public void test2(){
synchronized (this) {
System.out.println("同步调试222");
}
}
}
/*
* synchronized 对象锁是此对象所拥有的一把锁,其他同步代码都会受到这一把锁的影响
* 线程开启的两种方式 一种是实现Runnable接口 另一种则是继承Thread线程
* synchronized 只锁定被圈定的代码段 其他未被圈定的代码不受影响
* 多线程同时调用synchronized线程锁的代码,会被放入等待锁池中
*
* */
Java线程问题总结
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和...
- 前言 这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题。 这些多线程的问题,有些来源于各大网站...