第一讲
线程不是什么时髦的技术。对自己的长远发展有好处
什么是线程
线程就是程序的一条执行线索
创建线程的传统方式有两种
//执行线索
Thread thread = new Thread(){
@override
public void run(){
while(true){
//获取线程的方法
try{
Thread.sleep(500); //休息500毫秒
}
catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
System.out.println(this.getName);
}
}
};
thread.start();
//找代码运行,就是Thread里面的run()方法
创建Thread的子类。覆盖run()
Thread thread2 = new Thead(new Runnable(){
@override
public void run(){
while(true){
//获取线程的方法
try{
Thread.sleep(500); //休息500毫秒
}
catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
}
}
});
thread2.start();
创建线程的区别:
第二种更体现面向对象的思维Runnable,一个线程对象,一个是线程所运行代码对象。
思考:
new Thread(
new Runnable(){
public void run(){
while(true){
//获取线程的方法
try{
Thread.sleep(500); //休息500毫秒
}
catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(“runnable :” + Thread.currentThread().getName());
}
}
){
public void run(){
while(true){
//获取线程的方法
try{
Thread.sleep(500); //休息500毫秒
}
catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(“thread :” + Thread.currentThread().getName());
}
}
}.start();
执行那个run方法(执行第二个run方法)
用多线程会提高程序的执行效率么?
举例(一个桌子做馒头快还是多个桌子做馒头)
对线程下载快,是抢了服务器的带宽
第二讲
定时器(特别是做游戏的,每一秒钟移动到帧数产生动画)
public class TraditionalTimerTest{
public static void main(String[] args){
new Timer().schedule(new TimeTask(){
@override
public void run(){
System.out.println(“bombing!”);
}
}, 10000);
while(true){
System.out.println(new Date().getSecondes());
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
把下面的while(true)去掉定时器也会执行
new Timer().schedule(timetask, 10000, 3000);第一次10秒后执行,然后每3秒执行
Timer定时器一个对象, TimerTask是执行任务对象
出一道题(第一次2秒,第二次4秒)交替执行怎么做
炸弹里面还有炸弹,定时器里面还有定时器
Class MyTimeTask extends TimerTask{
@Override
public void run() {
System.ount.println(“bombing”);
new Timer().schedule(new MyTimerTask(), 2000);
}
}
new Timer().scheduler(new MyTimerTack(), 2000);
两种方式(1.是用静态变量。2是创建两个炸弹)
内部类不能声明静态变量
Class MyTimeTask extends TimerTask{
@Override
public void run() {
count = (count + 1) %2;
System.ount.println(“bombing”);
new Timer().schedule(new MyTimerTask(), 2000 + 2000 * count);
}
}
new Timer().scheduler(new MyTimerTack(), 2000);
每天凌晨3点收邮件
开源的工具quartz(可以实现周一到周五执行,周六周天休息)
转载请注明:学时网 » 张孝祥老师-java并发编程听课笔记(一)