简单的一些算法和多线程开发

两个线程交替打印,就是要两个线程之间进行同步,走走停停。线程的同步可以使用Object类自带的wait和notify(或者notifyAll)方法实现。
synchronized(lock)
//通知其他线程运行
lock.notify();
//先等待
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}

Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();

// thread 1
lock.lock();
condition.await();
doSomething();
lock.unlock();

// thread 2
lock.lock();
doSomething();
condition.signal();
lock.unlock();

void signal():唤醒一个等待在condition上的线程,将该线程从等待队列中转移到同步队列中,如果在同步队列中能够竞争到Lock则可以从等待方法中返回。

Condition能够支持不响应中断,而通过使用Object方式不支持;
Condition能够支持多个等待队列(new 多个Condition对象),而Object方式只能支持一个;
Condition能够支持超时时间的设置,而Object不支持

斐波那契数列,青蛙跳格
public static int JumpFloor(int target) {
if(target == 1){
return 1;
}
if(target == 2){
return 2;
}
//第一次有两种选择,然后根据不同的选择,然后开始不同的下一步,但是下一步还是一样有两种选择
return JumpFloor(target - 1) + JumpFloor(target - 2);
}
下面是方法二,主要还是有规律,实际这样的写法没意义
public int JumpFloor2(int target) {
int x=1, y=2, z;
if(target == 1){
return 1;
}
if(target == 2){
return 2;
}
for(int i = 3; i <= target; i ++){
z = y;
y = x + y;
x = z;
}
return y;

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值