求助6000,1650镜头摔了微单镜头无法识别通病

18:46 提问
synchronized同步问题:三个线程同时加载一个对象,为什么一个线程能连续运行多次?
package com.day14;
public class demo14 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
demo14 de=new demo14();
public demo14()
TicketWindow tw1=new TicketWindow();
Thread t1=new Thread(tw1);
Thread t2=new Thread(tw1);
Thread t3=new Thread(tw1);
t1.start();
t2.start();
t3.start();
class TicketWindow
implements Runnable
int nums=2000;
public void run() {
// TODO 自动生成的方法存根
while(true){
synchronized (this) {
if(nums&0)
System.out.println(Thread.currentThread().getName()+
"正在售出第"+nums+"张票");
Thread.sleep(1000);
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
// TODO 自动生成的 catch 块
Thread-1正在售出第2000张票
Thread-1正在售出第1999张票
Thread-2正在售出第1998张票
Thread-2正在售出第1997张票
Thread-0正在售出第1996张票
Thread-2正在售出第1995张票
Thread-2正在售出第1994张票
Thread-1正在售出第1993张票
Thread-1正在售出第1992张票
Thread-1正在售出第1991张票
Thread-1正在售出第1990张票
Thread-1正在售出第1989张票
Thread-1正在售出第1988张票
Thread-1正在售出第1987张票
把睡眠提到对象锁前面同一个线程就不会连续运行
class TicketWindow
implements Runnable
int nums=2000;
public void run() {
// TODO 自动生成的方法存根
while(true){
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
synchronized (this) {
if(nums&0)
System.out.println(Thread.currentThread().getName()+
"正在售出第"+nums+"张票");
// TODO 自动生成的 catch 块
Thread-0正在售出第2000张票
Thread-2正在售出第1999张票
Thread-1正在售出第1998张票
Thread-0正在售出第1997张票
Thread-1正在售出第1996张票
Thread-2正在售出第1995张票
Thread-1正在售出第1994张票
Thread-0正在售出第1993张票
Thread-2正在售出第1992张票
Thread-1正在售出第1991张票
Thread-0正在售出第1990张票
Thread-2正在售出第1989张票
Thread-1正在售出第1988张票
Thread-0正在售出第1987张票
Thread-2正在售出第1986张票
按赞数排序
首先,你启动了三个线程,传入相同的对象,那么synchronized代码块的this就会存在锁竞争的情况;其次,线程的synchronized使用的内置锁,内置锁的获取应该是抢占式的,该代码中一次while循环完成后会释放锁,如果此时其他线程还处于等待锁而挂起的状态,那么同一个线程当然有可能刚释放锁就立即又获取到锁。这根线程的调度方式有关。这是我的个人理解,共勉。
t1,t2,t3不是同一个进程
你可以这么写,pri
加个static关键字你的位置:
关于多线程为什么不能立即停止的问题
10:15:45 |
来源: 按键精灵资源站
我开了一个线程,然后想进行下一步时需要停止或暂停该线程,但是每次执行了命令后他仍然会执行原来的线程,不能立即停止或暂停,怎么破。。。> 使用createthread创建的线程,要等到主线程运行结束后才显示结果。怎么使用createth
使用createthread创建的线程,要等到主线程运行结束后才显示结果。怎么使用createth
mayue3759 & &
发布时间: & &
浏览:43 & &
回复:1 & &
悬赏:0.0希赛币
使用createthread创建的线程,要等到主线程运行结束后才显示结果。怎么使用createthread创建的线程,要等到主线程运行结束后才显示结果啊。。我创建了一个线程,然后在主线程里使用while(i)等待子线程执行完毕,但是子线程貌似没有执行。 &
goline (LPVOID pParam) { &
cout$<<$ffffff&; &
fff= &} & HANDLE d=CreateThread(NULL,0,goline,NULL,0,0); & while(!fff); &
  C/C++ code  bool fff =
DWORD WINAPI goline (LPVOID pParam)
ShowMessage(&fffffffff&);
//---------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
HANDLE d = CreateThread(NULL, 0, goline, NULL, 0, 0);
while (!fff)
Application-&ProcessMessages();
}mayungood & &
21:05:19 & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&问个问题,为什么线程被创建后不会立即运行?_c++吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:282,835贴子:
问个问题,为什么线程被创建后不会立即运行?收藏
简爱国际婚恋专为离婚单身女士提供高质素,高效率,高价值婚恋指导服务机构
因为线程执行需要时间啊,当你创建之后,那段空隙,足够执行你下面的语句了好嘛。
createthread只是把你的线程参数告诉windows,他接收成功了就返回。至于什么时候执行新线程,那是调度的问题。即使在有空闲核的多核CPU中,他也不见得就跑得过你主线程的后几条指令。你的resume是哪一个意思?
没事搞什么CreateThread。不怕msvcrt哭诉漏尿?
基本上就是上面说过的,除非显式干预调度,抢占式多任务原则上不会提供决定性保证,线程执行只能提供并发而不保证并行。因为这里所谓的线程根本就没法用语言特性(类似进程代数之类的语义)描述清楚,你交互使用的API只能间接控制TCB之类的数据结构改变状态,这和调度实现响应状态的变更在逻辑上是两回事。当然系统可以提供保证原子地创建和占用处理器时间片的隐含调度API,但这不但是不必要的耦合,对用户态程序来讲基本就是个安全漏洞(无效化实时优先级,拒绝特权程序抢占CPU资源),从软件架构的角度上实现起来也麻烦(需要在不同的间接层开洞)。所以至少在抢占式多任务(分时)系统下我是没见过谁那么无聊拿这种捆绑搭售的API给你用。
这是由调度决定的。要不然你主线程Sleep(0)试一下?
操作系统讲的很清楚,你需要来问?
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 微单镜头无法识别通病 的文章

 

随机推荐