当一个方法被调用时,哪个线程将在c#和java中运行?

时间:2014-09-19 08:49:13

标签: java .net multithreading logic filestream

每个人都知道我们正在使用多线程平台,我们正在开发多线程应用程序。顺便说一句,我无法识别线程问题。当我调用静态方法(即在另一个类中)时,将运行哪个线程? gui线程去工作和运行方法?即: (我将给出vb代码示例。逻辑与java相同。)

Private Sub runValuesTest_Click(sender As System.Object, e As System.EventArgs) Handles RunValuesTest.Click
   DummyClass.Instance.DoJob()
End sub()

这是vb语法,但没关系。主要逻辑与C#和Java相同。当我点击按钮,将是新的线程运行?还是gui线程上班?

如果要运行新线程,我们为什么以及何时使用New Thread来完成工作?

如果gui线程开始,我会看到很多时间在一个程序中运行多个线程。线程如何在程序中有所不同?为何以及何时以某种方式发生线程异常?例如:我正在用这种方法进行文件操作:(这可能是不同的问题)

Private _file As System.IO.StreamWriter
Private Sub runValuesTest_Click(sender As System.Object, e As System.EventArgs) Handles RunValuesTest.Click
    If Not Directory.Exists("GraphXml") Then
        Directory.CreateDirectory("GraphXml")
    End If

    _fileName = "GraphXml\Graph_" & txtName & ".xml"

    _file = My.Computer.FileSystem.OpenTextFileWriter(_fileName, False)

    _file.WriteLine("<?xml version=""1.0"" encoding=""UTF-8""?>")

    _file.WriteLine("<n0>")

    DepthFirstSearch(StaticService.AllNodes(0))

    _file.WriteLine("</n0>")
    _file.Close()
    _file.Dispose()
 End Sub

当我点击这么快(每两秒钟点击一次)时,它会给出错误&#34;另一个进程使用文件&#34;。

如果这个gui线程,为什么会出错?

如果它是新线程,为什么我们在按钮点击方法中做一些像gui操作的人员。 ? (大家都知道,要做gui操作,我们想使用gui线程,我是对的吗?)

这第二个代码部分可能是不同的问题,但我只是想学习.net的THREAD背后的逻辑(我认为逻辑对java也有效)

由于

编辑:这可能与JAVA无关。虽然我给了vb代码示例,但我添加了java标记,因为我认为逻辑是相同的。

1 个答案:

答案 0 :(得分:1)

  

当我调用静态方法(在另一个类中)时,将运行哪个线程?

不会调用方法。你写代码。 线程调用方法。线程是执行代码的代理。每个程序至少有一个线程。当一个线程调用一个方法(静态或非静态)时,该方法在调用它的线程中调用。

  

当我点击按钮时,新线程会运行吗?还是gui线程上班?

这是一个关于Visual Basic的问题。我不知道Visual Basic,但许多GUI框架都有一个“事件处理程序线程”。单击按钮时,事件将由事件处理程序线程中运行的框架代码读取。框架确定哪个窗口,哪个窗口小部件等,然后如果您的代码已经注册了处理程序,则事件处理程序线程会调用您的处理程序方法。

  

要做gui操作,我们想使用gui线程,我是对的吗?)

有许多GUI框架是单线程的强大原因。 https://weblogs.java.net/blog/kgh/archive/2004/10/multithreaded_t.html但是,如果你问的是Visual Basic,那就是我不知道的事情。

  

程序中的线程如何不同?

     

为什么以及何时以某种方式发生线程异常?

     

...

在尝试用英语提问之前,您需要学习更多英语,或者在尝试询问有关线程的问题之前,您需要了解有关线程的更多信息(通过一些教程)。你的很多问题似乎都没有多大意义。