このコードがどのように機能しているかを私に説明していただけませんか？
このコードは、PYQT5アプリケーションでスレッドを作成および実行する3つの異なる方法を示しています。

1.「qthread」のサブクラス化：「aThread」は「qthread」のサブクラスです。`run（）`メソッドをオーバーライドして、「増加」を5回にわたって印刷します。

2.「qobject」をサブクラス化し、「movetothread」を使用します。「long_running」メソッドがあり、「bが増加する」を毎秒5回印刷し、ループが完了した後に完成した信号を発します。オブジェクトは、「Movetothread」メソッドを使用して別のスレッドに移動されます。スレッドが起動すると、「long_running」メソッドが実行されます。

3.「qrunnable」を使用する： `runnable`は「qrunnable」クラスです。5回、「Cが増加する」を毎秒印刷する実行方法があります。実行メソッドがスレッドプールに追加され、新しいスレッドが作成され、メソッドが実行されます。

これらの3つの方法はそれぞれ、別の関数で実証されています。それらのそれぞれを実行するには、「メイン」セクションの対応する関数を外し、他の2つにコメントします。