java多线程核心技术_《Java多线程编程核心技术》读后感(一)

1、继承ThreadpackageFirst;public class MyThread extendsThread {public voidrun() {super.run();System.out.println("mythread");}}packageFirst;public classTest {public static voidmain(String[] args) {MyThrea...
摘要由CSDN通过智能技术生成

d19ef0095b1e8653f6cac59cbe8b7be5.png

1、继承Thread

packageFirst;public class MyThread extendsThread {public voidrun() {super.run();

System.out.println("mythread");

}

}

packageFirst;public classTest {public static voidmain(String[] args) {

MyThread myThread= newMyThread();

myThread.start();

System.out.println("main");

}

}

788bcdd7e53cc242a598bea88ad49d50.png

在使用多线程技术时,代码的运行结果与代码执行顺序或调用顺序是无关的。

packageFirst;public classTest {public static voidmain(String[] args) {

MyThread myThread= newMyThread();

myThread.start();

myThread.start();

System.out.println("main");

}

}

f55965de74bb739516f02dcd3a1e1bb7.png

多次执行start(),会出现java.lang.IllegalThreadStateException异常

packageFirst;public classTest {public static voidmain(String[] args) {

MyThread myThread= newMyThread();

myThread.run();

System.out.println("main");

}

}

start()通知“”线程规划器“”此线程已经准备就绪,等待调用线程对象的run(),具有异步效果。如果直接调用run(),则是同步,从上到下顺序依次执行

f17439e463a50a562e3d5d4f0b6b95c4.png

执行start()顺序不代表线程启动的顺序。

2、实现runnable接口

packageFirst;public class MyRunnable implementsRunnable {

@Overridepublic voidrun() {

System.out.println("运行中");

}

}

packageFirst;public classRun {public static voidmain(String[] args) {

Runnable runnable= newMyRunnable();

Thread thread= newThread(runnable);

thread.start();

System.out.println("运行结束");

}

}

d9bbc8618e1c94c8c82203d708dd594c.png

Thread构造函数:

299f0925ea61622ccd90e773ab70ccb2.png

构造函数Thread(Runnable target)意味着不光可以传入runnable接口的对象,还可以传入Thread类的对象,这样做完全可以将一个Thread对象的run()方法交给其他线程进行调用

实例变量与线程安全

(1)不共享数据

packageFirst;public class MyThread extendsThread {private int count = 5;publicMyThread(String name) {super();//设置线程名称

this.setName(name);

}public voidrun() {super.run();while(count>0) {

count--;

System.out.println("由"+this.currentThread().getName()+"计算,count="+count);

}

}

}

packageFirst;public classTest {public static voidmain(String[] args) {

MyThread a= new MyThread("A");

MyThread b= new MyThread("B");

MyThread c= new MyThread("C");

a.start();

b.start();

c.start();

System.out.println("main");

}

}

a6ce1e9edb0301a448ce6d9b8f93e06d.png

(2)共享数据

packageFirst;public class MyThread extendsThread {private int count = 5;public voidrun() {super.run();

//此实例不要用for语句,因为使用同步后其他线程就得不到运行的机会了

count--;

System.out.println("由"+this.currentThread().getName()+"计算,count="+count);

}

}

packageFirst;public classTest {public static voidmain(String[] args) {

MyThread myThread= newMyThread();

Thread a= new Thread(myThread,"A");

Thread b= new Thread(myThread,"B");

Thread c= new T

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值