当前位置: 首页 > 面试题库 >

多线程控制台输出?

姚德容
2023-03-14
问题内容

如果我有多个go例程,并且其中两个或两个以上例程决定需要打印某些内容,那么它们是否可能彼此中断?

例如:

package main

import (
    "fmt"
)

func main() {
    go print()
    print()
}

func print() {
    for true {
        fmt.Print("ABCDEF")
    }
}

是否有可能一个常规程序开始打印(AB),而另一个常规程序中断(ABABCDEF)和原始装订(ABABCDEFCDEF)?

我尝试自己运行它并检查输出,它 看起来 不错,但是如何确定?


问题答案:

是的,有可能,尽管GOMAXPROCS =
1不会显示任何内容。当使用更多goroutine,更大的行和更多的线程运行时,它们将显示出来。写入无缓冲的stderr时更是如此,因为stdout缓冲区接受短写的速度足够快以帮助防止交错。

这就是为什么“ log”包中的Logger具有内部互斥体和缓冲区以正确序列化调用的原因。



 类似资料:
  • 问题内容: 我意识到在SO上也有类似的问题,但是它们并不能完全解决我的问题。 我想要一个给定Class对象的方法,该方法将在该Class(如果存在)上调用“ main”方法,即public static void main,并捕获该main方法的控制台输出。进行调用的类是非守护线程。 我已经有部分代码了,但是我不确定如何捕获控制台输出,最重要的是,如何仅捕获此特定线程的输出。这是我到目前为止的内容

  • 我有一些多行文字作为控制台输入。诸如此类: 行数可能每次都不同(一、二、三、四等,但不是零),但这个文本总是在瞬间用行分隔符(一个粘贴,而不是按回车键输入几个)输入。这个Java应用程序必须立即开始对这些行做些什么,但出于某种原因,我不明白如何做出这种行为。我的意思是,它必须将所有这些行保存到,或,或

  • 当我在Android Studio上运行应用程序时,我看到了一些垃圾收集输出: 这是什么意思?(我正在阅读大型csv文件,其中有更多70k行)

  • 问题内容: 通过控制台进行任何输入的数据类型(如我使用BufferedReader类所做的那样)为String。之后,我们将其类型转换为需要查询的数据类型(如Inter.parseInt()为整数)。但是在C语言中,我们可以接受任何输入原始数据类型,而在Java中,所有输入类型都是Neccerily String。为什么是这样? 问题答案: 控制台输入实际上以一系列字节而不是字符串的形式读入。这是

  • 接口 URL {youke-url}/console/Index.php?c=department&a=line&timestamp=1607677497&access_key=abc&sign=c7da8103312da8793af4f526a42cb6ebaa06cfd4 请求方式 POST Content-Type form-data 请求Query参数 参数 示例值 是否必填 参数描述 c

  • 我一直在尝试编码来查找给定数组元素的LCM。我的代码如下 我的问题是,当我输入时,输出控制台会冻结。我尝试了另一种没有while循环的方法。也就是说,消除了while循环,并在最后添加了一个if循环。 但现在编译器抛出一个错误,指出并非所有代码路径都返回一个值。有人能帮我解决代码中的问题吗?我是一名编程初学者。提前谢谢!!